148 lines
3.7 KiB
JavaScript
148 lines
3.7 KiB
JavaScript
![]() |
/**
|
||
|
* @name jQuery FullScreen Plugin
|
||
|
* @author Martin Angelov, Morten Sjøgren
|
||
|
* @version 1.2
|
||
|
* @url http://tutorialzine.com/2012/02/enhance-your-website-fullscreen-api/
|
||
|
* @license MIT License
|
||
|
*/
|
||
|
|
||
|
/*jshint browser: true, jquery: true */
|
||
|
(function($){
|
||
|
"use strict";
|
||
|
|
||
|
// These helper functions available only to our plugin scope.
|
||
|
function supportFullScreen(){
|
||
|
var doc = document.documentElement;
|
||
|
|
||
|
return ('requestFullscreen' in doc) ||
|
||
|
('mozRequestFullScreen' in doc && document.mozFullScreenEnabled) ||
|
||
|
('webkitRequestFullScreen' in doc);
|
||
|
}
|
||
|
|
||
|
function requestFullScreen(elem){
|
||
|
if (elem.requestFullscreen) {
|
||
|
elem.requestFullscreen();
|
||
|
} else if (elem.mozRequestFullScreen) {
|
||
|
elem.mozRequestFullScreen();
|
||
|
} else if (elem.webkitRequestFullScreen) {
|
||
|
elem.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function fullScreenStatus(){
|
||
|
return document.fullscreen ||
|
||
|
document.mozFullScreen ||
|
||
|
document.webkitIsFullScreen ||
|
||
|
false;
|
||
|
}
|
||
|
|
||
|
function cancelFullScreen(){
|
||
|
if (document.exitFullscreen) {
|
||
|
document.exitFullscreen();
|
||
|
} else if (document.mozCancelFullScreen) {
|
||
|
document.mozCancelFullScreen();
|
||
|
} else if (document.webkitCancelFullScreen) {
|
||
|
document.webkitCancelFullScreen();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function onFullScreenEvent(callback){
|
||
|
$(document).on("fullscreenchange mozfullscreenchange webkitfullscreenchange", function(){
|
||
|
// The full screen status is automatically
|
||
|
// passed to our callback as an argument.
|
||
|
callback(fullScreenStatus());
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// Adding a new test to the jQuery support object
|
||
|
$.support.fullscreen = supportFullScreen();
|
||
|
|
||
|
// Creating the plugin
|
||
|
$.fn.fullScreen = function(props){
|
||
|
if(!$.support.fullscreen || this.length !== 1) {
|
||
|
// The plugin can be called only
|
||
|
// on one element at a time
|
||
|
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
if(fullScreenStatus()){
|
||
|
// if we are already in fullscreen, exit
|
||
|
cancelFullScreen();
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
// You can potentially pas two arguments a color
|
||
|
// for the background and a callback function
|
||
|
|
||
|
var options = $.extend({
|
||
|
'background' : '#111',
|
||
|
'callback' : $.noop( ),
|
||
|
'fullscreenClass' : 'fullScreen'
|
||
|
}, props),
|
||
|
|
||
|
elem = this,
|
||
|
|
||
|
// This temporary div is the element that is
|
||
|
// actually going to be enlarged in full screen
|
||
|
|
||
|
fs = $('<div>', {
|
||
|
'css' : {
|
||
|
'overflow-y' : 'auto',
|
||
|
'background' : options.background,
|
||
|
'width' : '100%',
|
||
|
'height' : '100%'
|
||
|
}
|
||
|
})
|
||
|
.insertBefore(elem)
|
||
|
.append(elem);
|
||
|
|
||
|
// You can use the .fullScreen class to
|
||
|
// apply styling to your element
|
||
|
elem.addClass( options.fullscreenClass );
|
||
|
|
||
|
// Inserting our element in the temporary
|
||
|
// div, after which we zoom it in fullscreen
|
||
|
|
||
|
requestFullScreen(fs.get(0));
|
||
|
|
||
|
fs.click(function(e){
|
||
|
if(e.target == this){
|
||
|
// If the black bar was clicked
|
||
|
cancelFullScreen();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
elem.cancel = function(){
|
||
|
cancelFullScreen();
|
||
|
return elem;
|
||
|
};
|
||
|
|
||
|
onFullScreenEvent(function(fullScreen){
|
||
|
if(!fullScreen){
|
||
|
// We have exited full screen.
|
||
|
// Detach event listener
|
||
|
$(document).off( 'fullscreenchange mozfullscreenchange webkitfullscreenchange' );
|
||
|
// Remove the class and destroy
|
||
|
// the temporary div
|
||
|
|
||
|
elem.removeClass( options.fullscreenClass ).insertBefore(fs);
|
||
|
fs.remove();
|
||
|
}
|
||
|
|
||
|
// Calling the facultative user supplied callback
|
||
|
if(options.callback) {
|
||
|
options.callback(fullScreen);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return elem;
|
||
|
};
|
||
|
|
||
|
$.fn.cancelFullScreen = function( ) {
|
||
|
cancelFullScreen();
|
||
|
|
||
|
return this;
|
||
|
};
|
||
|
}(jQuery));
|