全屏必须由用户手势触发,调用 requestFullscreen() 前需绑定 click 等事件;检测用 document.fullscreenElement,退出用 document.exitFullscreen(),样式适配用 :fullscreen 伪类。
requestFullscreen() 进入全屏元素全屏必须由用户手势(如 click、keydown)触发,直接在脚本中调用会失败并抛出 TypeError: Document not active 或静默拒绝。现代浏览器要求全屏请求必须是“用户发起的”。
正确做法是绑定点击事件,在回调中调用目标元素的 requestFullscreen() 方法:
document.getElementById('myVideo').addEventListener('click', () => { document.getElementById('myVideo').requestFullscreen();});
document 或 document.body 也能调用,但效果等价于让整个页面全屏webkitRequestFullscreen、mozRequestFullScreen、msRequestFullscreen
fullscreenchange 事件;失败则触发 fullscreenerror
不能靠变量手动维护状态,应以 document.fullscreenElement 为准——它返回当前全屏的元素(null 表示未全屏)。
注意拼写:Chrome/Firefox 是 fullscreenElement,旧版 Safari 是 webkitFullscreenElement,IE 是 msFullscreenElement。
立即学习“前端免费学习笔记(深入)”;
document.fullscreenElement === myDiv 表示 myDiv 正在全屏document.fullscreenElement === null 表示无元素全屏(包括刚退出或从未进入)document.isFullscreen —— 该属性不存在,是常见误查退出全屏统一调用 document.exitFullscreen(),而非元素上的方法。它返回 Promise,可链式处理失败情况:
document.exitFullscreen().catch(e => { console.warn('退出全屏失败:', e.name); // e.name 可能是 'NotAllowedError' 或 'NotFoundError'});
document.fullscreenElement 为 null),或被其他异步逻辑中断document.addEventListener('fullscreenchange', handler),不是 onfullscreenchange 属性document.fullscreenElement 判断方向全屏状态下,浏览器会自动给全屏元素及其祖先添加伪类 :fullscreen(标准)或带前缀的 ::-webkit-full-screen 等。这是唯一可靠的样式钩子。
不要试图用 JavaScript 动态加 class 模拟全屏样式,因为全屏切换可能发生在 JS 之外(如用户按 F11)。
div:fullscreen { width: 100vw; height: 100vh; }
:fullscreen 的权重高于普通 class,但低于内联 style;如有冲突,优先用 !important 显式覆盖:fullscreen 匹配的是当前 document.fullscreenElement,不是它的子元素display: none、或包含 iframe 且未设 allow="fullscreen",都会静默失败。调试时务必检查控制台错误,并始终用 document.fullscreenElement 做最终判断。