添加 (@host) 侦听器以进行全屏更改

ylu*_*ten 5 html javascript fullscreen addeventlistener angularjs

我想检测是否使用 HTML5 启用了 fullsceen 模式fullscreen API。我正在使用ChromeAngular 4.x

我创建了一个 Angular 组件并添加了以下内容@HostListener

@HostListener('document:webkitfullscreenchange', [$event])
FSHandler(event: KeyboardEvent) {
  console.log('fullscreen mode changed...');
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这不起作用。我试过删除浏览器前缀,捕获其他事件,如webkitFullscreenEnabled,但所有这些都没有帮助。

有什么建议?谢谢。

sea*_*ers 6

您需要处理fullscreenchange应用程序将打开的 Browser/browserkit的事件,从我见过的大多数指南中,有四个。我就是这样做的(我是 Angular 新手,所以可能有更好/更干净的方法),

@HostListener('fullscreenchange', ['$event'])
@HostListener('webkitfullscreenchange', ['$event'])
@HostListener('mozfullscreenchange', ['$event'])
@HostListener('MSFullscreenChange', ['$event'])
screenChange(event) {
  console.log(event);
}
Run Code Online (Sandbox Code Playgroud)

这会检测我尝试过的每个浏览器(OSX 上的桌面浏览器和 Android 上的移动浏览器)中的变化。

  • 我必须添加修改事件类型以包含诸如“document:fullscreenchange”之类的文档,以便触发事件,但除此之外,代码还有效。 (3认同)

小智 0

我能够用纯 javascript 做到这一点

this.document.addEventListener('webkitfullscreenchange', () => {
  console.log('fullscreen mode changed...');
})
Run Code Online (Sandbox Code Playgroud)

你也可以做类似的事情

document.onfullscreenchange = () => console.log('fullscreenchange event fired!');
Run Code Online (Sandbox Code Playgroud)

尽管不要忘记在最后一个示例中,如果您在具有此行的位置获得多个对象,则文档是单例。所以要注意。我个人在一个函数中修改了内部变量,但包含该回调的对象的多个实例存在,因此同一个文档被覆盖。

但如果你想用 Angular 的方式来做。你采取了正确的方法。我确实有相同的代码,但我的事件类型为“any”。我认为该事件不是 KeyboardEvent 类型。那可能是你的问题。