fullscreen-toggle
Version:
A lightweight utility to toggle fullscreen mode in web applications. Works with all JavaScript frameworks including React, Angular, Vue, and vanilla JS.
87 lines (85 loc) • 3.16 kB
JavaScript
/**
* Toggles fullscreen mode for web applications
* @param goFullScreen - true to enter fullscreen, false to exit fullscreen
* @returns Promise<boolean> - resolves to true if successful, false otherwise
*/
function toggleFullScreen(goFullScreen) {
return new Promise((resolve) => {
try {
if (goFullScreen) {
const elem = document.documentElement;
if (elem.requestFullscreen) {
elem.requestFullscreen().then(() => resolve(true)).catch(() => resolve(false));
}
else if (elem.webkitRequestFullscreen) {
elem.webkitRequestFullscreen(); // Safari
resolve(true);
}
else if (elem.msRequestFullscreen) {
elem.msRequestFullscreen(); // IE11
resolve(true);
}
else {
resolve(false);
}
}
else {
if (document.exitFullscreen) {
document.exitFullscreen().then(() => resolve(true)).catch(() => resolve(false));
}
else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen(); // Safari
resolve(true);
}
else if (document.msExitFullscreen) {
document.msExitFullscreen(); // IE11
resolve(true);
}
else {
resolve(false);
}
}
}
catch (error) {
resolve(false);
}
});
}
/**
* Checks if the browser is currently in fullscreen mode
* @returns boolean - true if in fullscreen, false otherwise
*/
function isFullScreen() {
return !!(document.fullscreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement);
}
/**
* Checks if fullscreen API is supported by the browser
* @returns boolean - true if supported, false otherwise
*/
function isFullScreenSupported() {
const elem = document.documentElement;
return !!(elem.requestFullscreen ||
elem.webkitRequestFullscreen ||
elem.msRequestFullscreen);
}
/**
* Adds an event listener for fullscreen changes
* @param callback - function to call when fullscreen state changes
* @returns function to remove the event listener
*/
function onFullScreenChange(callback) {
const handler = () => callback(isFullScreen());
// Add listeners for all browser variants
document.addEventListener('fullscreenchange', handler);
document.addEventListener('webkitfullscreenchange', handler);
document.addEventListener('msfullscreenchange', handler);
// Return cleanup function
return () => {
document.removeEventListener('fullscreenchange', handler);
document.removeEventListener('webkitfullscreenchange', handler);
document.removeEventListener('msfullscreenchange', handler);
};
}
export { toggleFullScreen as default, isFullScreen, isFullScreenSupported, onFullScreenChange, toggleFullScreen };