Skip to content

Instantly share code, notes, and snippets.

@jonas8
Forked from sofish/Native_FullScreen.js
Created February 6, 2012 03:08

Revisions

  1. @sofish sofish created this gist Nov 10, 2011.
    71 changes: 71 additions & 0 deletions Native_FullScreen.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,71 @@
    /*
    Native FullScreen JavaScript API
    CopyRight: Johndyer, http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/
    -------------
    Assumes Mozilla naming conventions instead of W3C for now
    */
    (function() {
    var
    fullScreenApi = {
    supportsFullScreen: false,
    isFullScreen: function() { return false; },
    requestFullScreen: function() {},
    cancelFullScreen: function() {},
    fullScreenEventName: '',
    prefix: ''
    },
    browserPrefixes = 'webkit moz o ms khtml'.split(' ');

    // check for native support
    if (typeof document.cancelFullScreen != 'undefined') {
    fullScreenApi.supportsFullScreen = true;
    } else {
    // check for fullscreen support by vendor prefix
    for (var i = 0, il = browserPrefixes.length; i < il; i++ ) {
    fullScreenApi.prefix = browserPrefixes[i];

    if (typeof document[fullScreenApi.prefix + 'CancelFullScreen' ] != 'undefined' ) {
    fullScreenApi.supportsFullScreen = true;

    break;
    }
    }
    }

    // update methods to do something useful
    if (fullScreenApi.supportsFullScreen) {
    fullScreenApi.fullScreenEventName = fullScreenApi.prefix + 'fullscreenchange';

    fullScreenApi.isFullScreen = function() {
    switch (this.prefix) {
    case '':
    return document.fullScreen;
    case 'webkit':
    return document.webkitIsFullScreen;
    default:
    return document[this.prefix + 'FullScreen'];
    }
    }
    fullScreenApi.requestFullScreen = function(el) {
    return (this.prefix === '') ? el.requestFullScreen() : el[this.prefix + 'RequestFullScreen']();
    }
    fullScreenApi.cancelFullScreen = function(el) {
    return (this.prefix === '') ? document.cancelFullScreen() : document[this.prefix + 'CancelFullScreen']();
    }
    }

    // jQuery plugin
    if (typeof jQuery != 'undefined') {
    jQuery.fn.requestFullScreen = function() {

    return this.each(function() {
    if (fullScreenApi.supportsFullScreen) {
    fullScreenApi.requestFullScreen(this);
    }
    });
    };
    }

    // export api
    window.fullScreenApi = fullScreenApi;
    })();