How to exit fullscreen onclick using Javascript?

后端 未结 5 980
隐瞒了意图╮
隐瞒了意图╮ 2021-01-31 03:14

Not sure if the following code snip will work embedded on SO, as it didn\'t work when pasting it, however it does work stand-alone.

The problem, is I want this to be a t

相关标签:
5条回答
  • 2021-01-31 03:53

    Solutions provided here are incredibly long. You can use these few lines to show or cancel fullscreen.

    Show full screen:

      /* You can use any HTML element through JS selector functions
       * eg. document.querySelector(".example");
      */
    const element = document; 
    const requestFullScreen = element.requestFullscreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
    requestFullScreen.call(element);
    

    Cancel full screen:

    // As correctly mentioned in the accepted answer, exitFullscreen only works on document
    const cancellFullScreen = document.exitFullscreen || document.mozCancelFullScreen || document.webkitExitFullscreen || document.msExitFullscreen;
    cancellFullScreen.call(document);
    

    Chrome will display an error: Uncaught (in promise) TypeError: Document not active if exitFullscreen is called while not in fullscreen mode.

    0 讨论(0)
  • 2021-01-31 03:54

    A more generalized helper (derived from the accepted answer)...

    Get Mode

    The function can be invoked without arguments to find out if the browser is currently in Fullscreen Mode. It returns true if so and false otherwise.

    Set Mode

    The function can be invoked with a bool to explicitly set the current mode, where true ensures the browser is in Fullscreen Mode, and false ensures it isn't.

    Toggle Mode

    The function can be invoked with null as the only argument to implicitly set the mode to the opposite of whatever mode it is currently in.


    let fullscreen = function() {
    
        let enter = function() {
            let body = document.body;
            if (body.requestFullscreen) body.requestFullscreen();
            else if (body.webkitRequestFullscreen) body.webkitRequestFullscreen();
            else if (body.mozRequestFullScreen) body.mozRequestFullScreen();
            else if (body.msRequestFullscreen) body.msRequestFullscreen();
        };
    
        let exit = function() {
            if (document.exitFullscreen) document.exitFullscreen();
            else if (document.webkitExitFullscreen) document.webkitExitFullscreen();
            else if (document.mozCancelFullScreen) document.mozCancelFullScreen();
            else if (document.msExitFullscreen) document.msExitFullscreen();
        };
    
        let attemptToGetState = element => element && element !== null;
    
        return function(action=undefined) {
            if (action === true) enter();
            else if (action === false) exit();
            else {
                let currentlyFullscreen = (
                    attemptToGetState(document.fullscreenElement)       ||
                    attemptToGetState(document.webkitFullscreenElement) ||
                    attemptToGetState(document.mozFullScreenElement)    ||
                    attemptToGetState(document.msFullscreenElement)
                );
                if (action === undefined) return !! currentlyFullscreen;
                else currentlyFullscreen ? exit() : enter();
            }
        };
    
    }();
    
    0 讨论(0)
  • 2021-01-31 04:04

    Krang's answer was great, Carl's idea to modularize was too. But I couldn't easily understand his code. So here's my version in TypeScript:

    function isInFullScreen() {
      const document: any = window.document;
      return (document.fullscreenElement && document.fullscreenElement !== null) ||
            (document.webkitFullscreenElement && document.webkitFullscreenElement !== null) ||
            (document.mozFullScreenElement && document.mozFullScreenElement !== null) ||
            (document.msFullscreenElement && document.msFullscreenElement !== null);
    }
    
    function requestFullScreen(elem: any) {
      if (elem.requestFullscreen) {
        elem.requestFullscreen();
      } else if (elem.mozRequestFullScreen) {
        elem.mozRequestFullScreen();
      } else if (elem.webkitRequestFullScreen) {
        elem.webkitRequestFullScreen();
      } else if (elem.msRequestFullscreen) {
        elem.msRequestFullscreen();
      } else {
        console.warn("Did not find a requestFullScreen method on this element", elem);
      }
    }
    
    function exitFullScreen() {
      const document: any = window.document;
      if (document.exitFullscreen) {
        document.exitFullscreen();
      } else if (document.webkitExitFullscreen) {
        document.webkitExitFullscreen();
      } else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
      } else if (document.msExitFullscreen) {
        document.msExitFullscreen();
      }
    }
    
    function toggleFullScreen(elem: any) {
      // based on https://stackoverflow.com/questions/36672561/how-to-exit-fullscreen-onclick-using-javascript
      if (isInFullScreen()) {
        exitFullScreen();
      } else {
        requestFullScreen(elem || document.body);
      }
    }
    
    0 讨论(0)
  • 2021-01-31 04:10

    As of January 2020, in a slightly different scenario where I wanted to toggle fullscreen mode on a video tag, the accepted solution did not work for me on Safari & iOS Safari. On these platforms, the working APIs are webkitEnterFullScreen and webkitExitFullscreen and both should be called on the HTML Element. Therefore in my case the complete code with platform-specific fallbacks was :

    // Request full screen
    const requestVideoFullScreen = videoElt.requestFullscreen || videoElt.webkitEnterFullScreen || videoElt.mozRequestFullScreen || videoElt.msRequestFullScreen;
    if (requestVideoFullScreen) {
        requestVideoFullScreen.call(videoElt);
    }
    ...
    // Exit full screen
    if (videoElt.webkitExitFullscreen) {
        videoElt.webkitExitFullscreen();
    } else {
        const cancelVideoFullScreen = document.exitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
        if (cancelVideoFullScreen) {
            cancelVideoFullScreen.call(document);
        }
    }
    

    Moreover, to use the fullscreen-related events I had to listen to the "webkitbeginfullscreen" and "webkitendfullscreen" events on iOS Safari, and "webkitfullscreenchange" on macOS Safari, as mentioned in this other SO answer.

    0 讨论(0)
  • 2021-01-31 04:17

    Figured it out.

    Apparently, to enter full screen, you need to use the Element, however to exit fullscreen, you use document.

    Here is the complete javascript function to toggle fullscreen that works !!!

    function fullscreen() {
        var isInFullScreen = (document.fullscreenElement && document.fullscreenElement !== null) ||
            (document.webkitFullscreenElement && document.webkitFullscreenElement !== null) ||
            (document.mozFullScreenElement && document.mozFullScreenElement !== null) ||
            (document.msFullscreenElement && document.msFullscreenElement !== null);
    
        var docElm = document.documentElement;
        if (!isInFullScreen) {
            if (docElm.requestFullscreen) {
                docElm.requestFullscreen();
            } else if (docElm.mozRequestFullScreen) {
                docElm.mozRequestFullScreen();
            } else if (docElm.webkitRequestFullScreen) {
                docElm.webkitRequestFullScreen();
            } else if (docElm.msRequestFullscreen) {
                docElm.msRequestFullscreen();
            }
        } else {
            if (document.exitFullscreen) {
                document.exitFullscreen();
            } else if (document.webkitExitFullscreen) {
                document.webkitExitFullscreen();
            } else if (document.mozCancelFullScreen) {
                document.mozCancelFullScreen();
            } else if (document.msExitFullscreen) {
                document.msExitFullscreen();
            }
        }
    }
    

    And a simple case on how to use it :

    <button onclick="fullscreen()">Toggle FullScreen</button>
    

    You need to make sure that this is a short method called when the user does an action on the page. From what the documentation says, is this is a feature that requires a higher access mode, and thus you can not (at this time) automatically force fullscreen on things like when the page has loaded, or async events (unless they are events from a users action like Click), etc.

    0 讨论(0)
提交回复
热议问题