【发布时间】:2012-01-11 14:13:27
【问题描述】:
正如标题所示,我想知道在浏览器进入/退出全屏模式时触发事件的最可靠方法是什么。
注意:我不是在问如何全屏显示当前页面,我只是想知道如果用户按 F11 或按 F11 或任何其他相关的全屏输入键。
【问题讨论】:
标签: javascript html events dom fullscreen
正如标题所示,我想知道在浏览器进入/退出全屏模式时触发事件的最可靠方法是什么。
注意:我不是在问如何全屏显示当前页面,我只是想知道如果用户按 F11 或按 F11 或任何其他相关的全屏输入键。
【问题讨论】:
标签: javascript html events dom fullscreen
当我偶然发现这个问题时,我正在处理这个事件,我想分享我对它的了解,即使它不能解决这个问题。 onfullscreenchange 事件现在支持带有前缀 by modern desktop browsers and Chrome for Android,但有一些事情要记住:
当窗口全屏时不会触发此事件,我知道这听起来很奇怪,但它似乎仅适用于文档及其元素。因此,如果文档的某个元素全屏显示,该事件将触发,但当使用键盘快捷键使浏览器全屏显示时则不会。
在 Chrome 和 Safari 中,函数可以通过定义文档方法 document.onwebkitfullscreenchange = myFunc; 或定义元素方法 myElem.onwebkitfullscreenchange = myFunc; 来订阅此事件,您也可以使用 addEventListener myElem.addEventListener("webkitfullscreenchange", myFunc);。在 IE 和 Firefox 中,该事件只有在文档中定义了方法并且使用 addEventListener 不会触发该事件时才会起作用。
这是此活动的Codepen Demo,更多信息请参见MDN Using fullscreen mode。
更新。来自 MDN 网络文档:
目前,并非所有浏览器都实现了 API 的无前缀版本(对于供应商不可知论者访问全屏 API,您可以使用 Fscreen)。
【讨论】:
fullscreenchangeevent(在全屏元素和 document 元素上测试),也不支持 @987654330 @监听器:需要设置onwebkitfullscreenchange监听器或者监听webkitfullscreenchange事件。
onwebkitfullscreenchange监听器,而对于Internet Explorer v10和v11,应该使用onmsfullscreenchange监听器。
screen.width 和screen.height 告诉你用户的屏幕分辨率,试试这个:
var fullscreen;
function onfullscreenchange(full) {
...
}
// You might want to use addEventListener and its equivalents instead
window.onresize = function () {
if (window.outerWidth === screen.width && window.outerHeight === screen.height) {
if (!fullscreen) {
fullscreen = true;
onfullscreenchange(true);
}
} else {
if (fullscreen) {
fullscreen = false;
onfullscreenchange(false);
}
};
我知道这不是做这一切的最干净或最稳健的方式,但希望它能给你一个想法。值得注意的是,IE
【讨论】:
使用media query 和回退到window.document.fullscreenElement 的另一种方法。
这适用于 Chrome,无论是点击/触摸事件还是按下 F11 键。
function fullscreenEvent(fullscreen) {
...
}
window.onresize = function () {
if (window.matchMedia('(display-mode: fullscreen)').matches ||
window.document.fullscreenElement) {
fullscreenEvent(true);
} else {
fullscreenEvent(false);
}
}
【讨论】:
有一个plugin available for jQuery(我知道你没有使用 jQuery)......它的作用是监听窗口上按下的键 - 所以它监听 F11 被按下等......不是最好的解决方案但一种可能有效的方法
我认为你被难住了......
一个想法...
我只是偶然发现了这个页面 -> http://www.javascriptkit.com/howto/newtech3.shtml
JavaScript 可以使用 screen.width / screen.height 来检测屏幕的大小......也许使用 resize 事件来查看浏览器是否匹配屏幕大小,即全屏?
@Nathans 的回答是正是我在说什么......
【讨论】:
有一个用于 Javascript 的 proposed Fullscreen API,它允许您连接到 onfullscreenchange 事件。
但是,我目前对浏览器的支持不是很乐观。
【讨论】:
如何使用这个jQuery plugin
是的,我知道可能有纯js的方式,但这很简单。
【讨论】: