- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我为我的应用程序实现了一个全屏切换功能,它实际上运行良好,在最新的 Chrome、Firefox、IE 和 Opera 上进行了测试。我有一种激活和停用全屏模式的方法:
public deactivateFullscreen(element) {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullscreen) {
document.webkitCancelFullScreen();
} else if (element.mozRequestFullScreen) {
document.mozCancelFullScreen();
}else if(element.msRequestFullscreen){
document.msExitFullscreen();
}
}
public activateFullscreen(element) {
if (element.requestFullScreen) {
element.requestFullScreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
}else if(element.msRequestFullscreen){
element.msRequestFullscreen();
}
}
因此,当从 UI 触发时,它们都可以正常工作。唯一的问题是,一旦我使用 F11
进入全屏模式,我就无法使用 deactivateFullscreen
函数退出它。据我了解,一旦我点击 F11
,浏览器就不会设置任何标志。我尝试使用以下方法对其进行测试:
public isFullscreen(element) {
if(element.webkitIsFullScreen || element.mozFullscreen || element.msFullscreenElement || element.fullscreenElement || element.fullscreen || element.webkitFullscreenElement || element.mozFullScreenElement){
return true;
}
return false;
}
这总是返回 false,无论我是否处于全屏模式。有没有其他方法可以检测浏览器当前是否处于全屏模式?还是我在这里遗漏了一些概念?
我尝试的另一件事是捕获 F11
的 keydown 事件并阻止其默认操作。
$document.on('keydown',this.fsHandle);
public fsHandle(event:KeyboardEvent){
if(event.keyCode == 122){
event.preventDefault();
this._isFullscreen = !this._isFullscreen;
}
}
我希望使用此方法抑制任何 F11
事件,以便通过代码手动处理全屏切换。不幸的是,这也行不通。原因似乎有点奇怪,当我已经处于全屏模式时,根本不会触发 keydown 事件。因此,我可以在全屏模式之外抑制事件,但一旦进入全屏模式就不能。
更新:一些研究表明,浏览器供应商的安全问题是造成这种行为的原因。仍然必须有一种方法来处理此类功能。
最佳答案
目前看来是不可能的。
参见 this question那是在问完全相同的事情。但这是一个不断变化的情况,值得不时重新审视,所以这里是我收集的一些细节。
那里的一条评论说:
This fullscreen window mode is OS dependent, only at an app level, and not tied to any API available to us poor web-devs. [...] You won't find any cross-browser/cross-OS hack (I don't even know any for my own browser/OS). The only way you could get something would be through [a] more powerful API, giving you an application access to the browser's window.
允许以编程方式控制全屏状态的 API 在 fullscreen spec 中定义,我希望它能阐明这个问题。浏览器尚未完全实现它(例如 document.exitFullscreen()
未在 Chrome 中实现并且 document.webkitExitFullscreen()
不返回 Promise
),但它给出了有关事情进展的提示。不幸的是,它没有提到预先存在的全屏浏览器功能(由 F11 触发的功能),因此很难说这将如何发展。
目前,F11-fullscreen 和 programmatic-fullscreen 是两种不同的东西,尽管彼此并不完全隔离。此外,例如在 macOS 上,浏览器的“全屏”功能完全不同,因为它确实占据了整个屏幕,但仍然可以显示地址栏和/或标签。
如果你勾选this demo page对于包装特定于浏览器的实现的库,您可以看到:
document.documentElement
) 的程序化全屏也不会发生这种情况,因此这是您可以从 F11 全屏获得的最接近结果。但这并不能使 F11-FS 和 programmatic-FS-on-doc-element 等价:
document.documentElement === (document.msFullscreenElement || document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement)
为 false,但在 programmatic-fullscreen 时为 true -on-document-element(在 Chrome & Firefox & IE11 上验证)由于有 2 个不同的功能,也许可以保留它们:如果用户输入 F11-fullscreen,他们将知道如何通过再次按同一个键退出。如果他们使用您的 UI 控件进入程序化全屏,请确保您清楚地表明如何退出。作为开发人员不能 100% 控制两者可能(可以理解)令人沮丧,但实际上用户可能会没事,因为他们将使用一个或另一个。
关于jquery - 如果使用 F11 触发,则全屏 API 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43392583/
这个问题已经有答案了: jQuery trigger click vs click ()? (3 个回答) 已关闭 5 年前。 我无法区分 trigger('click')与 trigger('cli
我正在运行 VS 2008 和 .NET 3.5 SP1。 我想在 HttpModule 中实现命中跟踪在我的 ASP.NET 应用程序中。很简单,我想。然而,BeginRequest我的事件 Htt
这是一段代码,我收到以下错误 #1064 - You have an error in your SQL syntax; check the manual that corresponds to yo
有没有办法用任意增量触发滚轮事件。就像 jQuery 对“点击”所做的那样: $('#selector').trigger('click'); 我需要类似的东西,只需一个滚轮即可: $('#selec
我正在尝试在配音数据库中触发时间。我想检查一下在不出现角色的电影配音中不能对角色进行配音。这是PDM: 和CDM 我是SQL的初学者,但我知道表“DUBBES”中应该有一些触发器。我试图做这样的事情,
这个问题已经有答案了: jquery programmatically click on new dom element (3 个回答) 已关闭 6 年前。 我有一个 jQuery 事件定义如下: $
主菜单的点击代码适用于类更改,但不适用于子菜单...当单击食物或鞋子等子菜单项时,它不会触发警报命令...事实上,悬停非常适合子菜单但不是活跃的 HTML
问题非常简单: $('#btn1').click(function(event){ alert( "pageX: " + event.pageX + "\npa
我使用 Spring 的调度程序 (@EnableScheduling) 并具有以下 @Scheduled 方法,该方法每分钟调用一次: @Component public class Schedul
错误 SQL 查询:文档 CREATE TRIGGER `triggers_div` AFTER INSERT ON `produits` FOR EACH ROW BEGIN INSERT INTO
我想在插入另一个表时填充表中的一些列值,并为特定列设置条件。我使用触发器: CREATE TRIGGER inserttrigger AFTER INSERT ON table1 FOR EACH R
我可以在 5.6 MySQL 环境中使用一些关于触发器的指导。我想创建一个触发器,如果发现具有相同速度的电脑的价格较低,则该触发器会停止更新。 架构是产品(制造商、型号、类型)PC(型号、速度、内
背景:我们有一个 completed_flag,默认为 0,当有人完成调查时更新为 1。我想记录这次更新发生的时间戳 在编写了这个触发器/函数以在标志从 0 触发到 1 时更新时间戳后,我怀疑我这样做
数据库中有两个表 KistStatus和 LastKistStatus .后者将保存 KistStatus 的所有“最新”值。 . KistStatus有大约 174.000 条记录,LastKist
我正在开发一个使用 APNS 的 iPhone 应用程序。我很清楚实现 APNS、创 build 备 token 的过程,等等等等……我不知道如何通过 Web 服务从提供商端触发和启动 APNS。任何
我有这个 javascript,当数量更改时会触发 update_cart... jQuery('div.woocommerce').on('change', '.qty', function
当我单击任何按钮时,click 事件不会被触发。艰难的是,我使用 $("div").on("click", "button", function () { 让它工作,但我想看到它使用 .class 工
如何在我的代码中触发 Android onCreateOptionsMenu 函数,即无需用户单击手机上的选项菜单按钮? 最佳答案 Activity.openOptionsMenu(); 就可以了 关
我将表单包装在 中然后我设置 list android:windowSoftInputMode="adjustResize" (默认 react native )。现在,当我用手指触摸事件手动聚焦一
我有一个 Android 编程问题。使用下面的代码我想验证一个字符串匹配。它验证正常,但 LogCat 显示 TextWatcher 方法在每次击键时触发两次,我不明白为什么。我希望每次击键只触发一次
我是一名优秀的程序员,十分优秀!