如果项目中使用的是 hooks 推荐使用:ahooks - useFullscreen
screenfull.js
github:https://github.com/sindresorhus/screenfull.js
全屏幕 API(Fullscreen API)是 JavaScript 用来让浏览器支持全屏幕的一种方式,透过 Fullscreen API 我们可以让画面可以一次呈现更多的数据,或是专注在某个影片或图片上面等等,然后目前浏览器的支持程度不一,因此要单纯使用 JavaScript 的 Fullscreen API,会变得复杂许多,而今天要介绍的 screenfull.js,就是用来减少 Fullscreen API 在不同浏览器之间实践差异的 library。
需求
实现F11页面全屏功能。(明明可以按 F11 解决的事,非要求添加一个按钮控制)
Vanilla JavaScript(原生 JS 实现)
我们必须检查目前浏览器是否支持 Fullscreen API,并针对不同浏览器调用不同的方法,这甚至还不够全面,还有更多。
document.fullscreenEnabled =document.fullscreenEnabled ||document.mozFullScreenEnabled ||document.documentElement.webkitRequestFullScreen;function requestFullscreen(element) {if (element.requestFullscreen) {element.requestFullscreen();} else if (element.mozRequestFullScreen) {element.mozRequestFullScreen();} else if (element.webkitRequestFullScreen) {element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);}}if (document.fullscreenEnabled) {requestFullscreen(document.documentElement);}
使用 screenfull.js
用screenfull.request()调用即可,简洁方便,兼容各个浏览器。
if (screenfull.enabled) {screenfull.request();}
react 中使用
效果
代码
import React, { useState } from 'react';import screenfull from 'screenfull';const Index = () => {const [screenText, setScreenText] = useState('进入全屏');const onScreenfull = async () => {if (screenfull.isEnabled) {// 全屏状态切换await screenfull.toggle();// 判断全屏状态const isFull = !!(document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement);setScreenText(isFull ? '退出全屏' : '进入全屏');}};return (<div><h3>全屏测试</h3><button onClick={onScreenfull}>{screenText}</button></div>);};export default Index;
对某个 element 全屏
如果只需要针对画面上的某个 element 进行全屏显示的话,也很简单,在 screenfull.request() 参数中加入要全屏显示的目标就可以了。
if (screenfull.enabled) {screenfull.request(document.getElementById('image'));}
取消全屏幕显示
基本上浏览器都支持直接按 esc 来取消全屏幕,如果希望在程序中取消,只要调用 screenfull.exit() 即可。
if (screenfull.enabled) {screenfull.exit();}
