Skip to content

Commit cb45027

Browse files
committed
Implement fullscreenchange/fullscreenerror event on document.
1 parent e239d34 commit cb45027

File tree

3 files changed

+106
-19
lines changed

3 files changed

+106
-19
lines changed

README.md

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ browsers (Like Chrome) and Firefox provide this new fullscreen feature.
1313
Usage
1414
-----
1515

16-
### Entering Fullscreen mode ###
16+
### Entering Fullscreen mode
1717

1818
You can either switch the whole page or a single HTML element to fullscreen
1919
mode:
@@ -25,7 +25,8 @@ This only works when the code was triggered by a user interaction (For
2525
example a onclick event on a button). Browsers don't allow entering
2626
fullscreen mode without user interaction.
2727

28-
### Exiting Fullscreen mode ###
28+
29+
### Exiting Fullscreen mode
2930

3031
Fullscreen mode is always exited via the document but this plugin allows
3132
it also via any HTML element. The owner document of the selected HTML
@@ -34,18 +35,37 @@ element is used then:
3435
$(document).fullScreen(false);
3536
$("#myVideo").fullScreen(false);
3637

37-
### Querying Fullscreen mode ###
38+
39+
### Querying Fullscreen mode
3840

3941
Simply pass no argument to the `fullScreen` method to query the current
40-
state. The method returns `true` when fullscreen mode is active, `false`
41-
if not or `null` when the browser does not support fullscreen mode at all.
42+
state. The method returns the current fullscreen element (or true if
43+
browser doesn't support this) when fullscreen mode is active, `false` if not
44+
active or `null` when the browser does not support fullscreen mode at all.
4245
So you can use this method also to display a fullscreen button only when the
4346
browser supports fullscreen mode:
4447

4548
$("#fullscreenButton").toggle($(document).fullScreen() != null))
4649

47-
### Toggling Fullscreen mode ###
50+
51+
### Toggling Fullscreen mode
4852

4953
The plugin provides another method for simple fullscreen mode toggling:
5054

5155
$(document).toggleFullScreen();
56+
57+
58+
### Notifications
59+
60+
The plugin triggers a `fullscreenchange` event on the document when the
61+
fullscreen mode has been changed. If the browser rejected a fullscreen
62+
state change then the plugin triggers a `fullscreenerror` event on the
63+
document. Example:
64+
65+
$(document).bind("fullscreenchange", function() {
66+
console.log("Fullscreen " + $(document).fullScreen() ? "on" : "off);
67+
});
68+
69+
$(document).bind("fullscreenerror", function() {
70+
alert("Browser rejected fullscreen change");
71+
});

jquery.fullscreen-min.js

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jquery.fullscreen.js

Lines changed: 76 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @preserve jquery.fullscreen 1.0.0
2+
* @preserve jquery.fullscreen 1.1.0
33
* https://github.com/kayahr/jquery-fullscreen-plugin
44
* Copyright (C) 2012 Klaus Reimer <k@ailis.de>
55
* Licensed under the MIT license
@@ -14,11 +14,14 @@
1414
* @param {boolean=} state
1515
* True to enable fullscreen mode, false to disable it. If not
1616
* specified then the current fullscreen state is returned.
17-
* @return {boolean|jQuery|null}
18-
* When querying the fullscreen state then true, false or null
19-
* is returned. Null indicates a browser without fullscreen
20-
* support. When setting the state then the current jQuery
21-
* selection is returned for chaining.
17+
* @return {boolean|Element|jQuery|null}
18+
* When querying the fullscreen state then the current fullscreen
19+
* element (or true if browser doesn't support it) is returned
20+
* when browser is currently in full screen mode. False is returned
21+
* if browser is not in full screen mode. Null is returned if
22+
* browser doesn't support fullscreen mode at all. When setting
23+
* the fullscreen state then the current jQuery selection is
24+
* returned for chaining.
2225
* @this {jQuery}
2326
*/
2427
function fullScreen(state)
@@ -55,10 +58,18 @@ function fullScreen(state)
5558
return null;
5659
}
5760

58-
// Return the current fullscreen state
59-
return !!doc["fullScreen"]
61+
// Check fullscreen state
62+
state = !!doc["fullScreen"]
6063
|| !!doc["webkitIsFullScreen"]
6164
|| !!doc["mozFullScreen"];
65+
if (!state) return state;
66+
67+
// Return current fullscreen element or "true" if browser doesn't
68+
// support this
69+
return (/** @type {?Element} */ doc["fullScreenElement"])
70+
|| (/** @type {?Element} */ doc["webkitCurrentFullScreenElement"])
71+
|| (/** @type {?Element} */ doc["mozFullScreenElement"])
72+
|| state;
6273
}
6374

6475
// When state was specified then enter or exit fullscreen mode.
@@ -80,7 +91,7 @@ function fullScreen(state)
8091
if (func) func.call(doc);
8192
return this;
8293
}
83-
};
94+
}
8495

8596
/**
8697
* Toggles the fullscreen mode.
@@ -93,9 +104,64 @@ function toggleFullScreen()
93104
{
94105
return (/** @type {!jQuery} */ fullScreen.call(this,
95106
!fullScreen.call(this)));
96-
};
107+
}
108+
109+
/**
110+
* Handles the browser-specific fullscreenchange event and triggers
111+
* a jquery event for it.
112+
*
113+
* @param {?Event} event
114+
* The fullscreenchange event.
115+
*/
116+
function fullScreenChangeHandler(event)
117+
{
118+
jQuery(document).trigger(new jQuery.Event("fullscreenchange"));
119+
}
120+
121+
/**
122+
* Handles the browser-specific fullscreenerror event and triggers
123+
* a jquery event for it.
124+
*
125+
* @param {?Event} event
126+
* The fullscreenerror event.
127+
*/
128+
function fullScreenErrorHandler(event)
129+
{
130+
jQuery(document).trigger(new jQuery.Event("fullscreenerror"));
131+
}
132+
133+
/**
134+
* Installs the fullscreenchange event handler.
135+
*/
136+
function installFullScreenHandlers()
137+
{
138+
var e, change, error;
139+
140+
// Determine event name
141+
e = document;
142+
if (e["webkitCancelFullScreen"])
143+
{
144+
change = "webkitfullscreenchange";
145+
error = "webkitfullscreenerror";
146+
}
147+
else if (e["mozCancelFullScreen"])
148+
{
149+
change = "mozfullscreenchange";
150+
error = "mozfullscreenerror";
151+
}
152+
else
153+
{
154+
change = "fullscreenchange";
155+
error = "fullscreenerror";
156+
}
157+
158+
// Install the event handlers
159+
document.addEventListener(change, fullScreenChangeHandler, true);
160+
document.addEventListener(error, fullScreenErrorHandler, true);
161+
}
97162

98163
jQuery.fn["fullScreen"] = fullScreen;
99164
jQuery.fn["toggleFullScreen"] = toggleFullScreen;
165+
installFullScreenHandlers();
100166

101167
})();

0 commit comments

Comments
 (0)