在全屏模式下观看 HTML5 视频时如何捕获键盘事件?

2023-12-14

我需要知道用户在全屏模式下观看 HTML5 视频时何时按下退出键。不幸的是,文档上配置的任何侦听器都不适用,因为当用户以全屏模式观看 HTML5 视频时,系统焦点位于本机视频播放器而不是浏览器上。

另一种方法是监听焦点何时从本机视频播放器恢复到浏览器,但我不确定如何捕获它。

document.addEventListener('keydown', function (e) { console.log(e.keyCode); }, false);

只要我在浏览器中,当我按键时,上面的内容就会成功登录到控制台。一旦 HTML5 视频进入全屏模式,浏览器显然就无法再将关键代码记录到控制台。

我想做的是退出全屏模式后从一个用户界面转换到另一个用户界面。

EDIT

Potench 的答案作为一个有用的起点,这就是为什么我接受它作为答案,尽管有以下警告:

  • 它仅适用于 Webkit 浏览器。 :-)
  • 正如最初定义的那样,它不起作用,因为video.webkitDisplayingFullscreen is true每当resize事件发生。

我通过利用动画帧来不断观察值的变化,使其发挥作用(仅在 Webkit 浏览器上):

var onFrame, isVideoFullscreen;

onFrame = window.requestAnimationFrame ||
          window.mozRequestAnimationFrame ||
          window.webkitRequestAnimationFrame ||
          window.oRequestAnimationFrame ||
          window.msRequestAnimationFrame ||
          function (fn) {
              setTimeout(fn, 1000 / 60);
          };

isVideoFullscreen = false;

function frame() {
    if (!isVideoFullscreen && video.webkitDisplayingFullscreen) {
        // entered fullscreen mode
        isVideoFullscreen = true;
    } else if (isVideoFullscreen && !video.webkitDisplayingFullscreen) {
        // exited fullscreen mode
        isVideoFullscreen = false;
    }
    onFrame(frame);
}
onFrame(frame);

好吧,我想我有一个适合您的解决方案...我只是假设您使用 jQuery 来轻松编写此代码。

我不相信您能够在全屏模式下捕获键盘事件...但您可以这样做以便在进入或退出全屏模式时收到通知。

var isVideoFullscreen = video.webkitDisplayingFullscreen;

$(window).bind("resize", function (e) {
    // check to see if your browser has exited fullscreen
    if (isVideoFullscreen != video.webkitDisplayingFullscreen) { // video fullscreen mode has changed
       isVideoFullscreen =  video.webkitDisplayingFullscreen;

       if (isVideoFullscreen) {
            // you have just ENTERED full screen video
       } else {
            // you have just EXITED full screen video
       }
    }
});

希望这可以帮助您或为您指明正确的方向

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在全屏模式下观看 HTML5 视频时如何捕获键盘事件? 的相关文章

随机推荐

  • 为什么 PHPUnit 代码覆盖率不报告未调用的函数?

    我正在尝试获取我的一个项目的代码覆盖率 但未调用的函数和类不会纳入覆盖率计算 当大块代码被忽略时 很难看出哪些内容 很多 没有被覆盖 在下图中 我希望前三个函数的主体以红色突出显示 至少在执行的函数中未执行的行显示为红色 无论如何 我正在使
  • 如何从ContentView获取ContentPage的BindingContext?

    我有以下 Contentpage content 我在其中设置了某些绑定上下文
  • 影响测量或影响排列

    我正在创建自定义控件 如果依赖项属性之一发生更改 我需要更新布局 我可以使用FrameworkMetadataProperty AffectsMeasure or FrameworkMetadataProperty AffectsArran
  • C++ 如何将输入值分配给 std::bitset 参数?

    我想制作一个简单的程序 它将从输入中获取位数并作为输出显示二进制数 写在给定的位上 例如 我输入 3 它显示 000 001 010 011 100 101 110 111 我遇到的唯一问题是第二个for 循环 当我尝试分配变量时位集bit
  • ios开发如何解析xml

    所以我知道如何解析一些 XML 结构 但我目前正在尝试解析这个特定的 xml 结构 这与我习惯的有点不同 通常我会解析类似的东西
  • 循环“接口”依赖关系和温莎堡

    我有组件 public interface IFoo public interface IBar public class Foo IFoo public IBar Bar get set public class Bar IBar pub
  • 在cucumber-junit中动态传递cucumber选项?

    我明白那个 CucumberOptions用于传递 Cucumber 选项 但由于Java注解只允许内联常量的限制 使用起来相当麻烦 CucumberOptions 那么 使用 cucumber junit 时是否有一种动态方式来传递 Cu
  • 在 Fedora 16 上安装 X11

    我希望安装 X11 开发库 我的操作系统是 Fedora 16 我发现这个链接提供了 X11R7 6 的源代码 http www x org releases X11R7 6 src 你能告诉我接下来的几个步骤吗 提前致谢 无需自己下载标头
  • 如何在 Perl 程序中将行换行至 45 个字符?

    我正在 Perl CGI 程序中编写以下文本 text message lines split n text lCnt lines 1 lineStart 80 lineHeight 24 我想在 45 个字符后强制返回 我在这里该怎么做
  • RemoteViewFactory onDataSetChanged() 每个notifyAppWidgetViewDataChanged() 仅调用一次[重复]

    这个问题在这里已经有答案了 我正在构建一个小部件来加载每个食谱的成分列表 我的目标是能够拥有该小部件的多个实例 并独立加载 更新它们的成分列表 ListView 我已经设置了一个配置活动供用户选择菜谱 配置并填充远程视图并为我的配料列表创建
  • 使用 SharePoint spfx、React 和 Get 组件与模板的 Graph Toolkit 工作示例

    我正在尝试在我的 SharePoint spfx Web 部件解决方案中使用 Microsoft Graph Toolkit 更具体地说是 React 版本 microsoft mgt react 我已成功导入包 并正确呈现控件 不过 我现
  • 如何在 C 中以可移植的方式管理内存对齐和通用指针算术?

    我必须实现 malloc realloc free 的优化版本 针对我的特定应用程序量身定制 目前代码在特定平台上运行 但如果可能的话 我想以可移植的方式编写它 平台将来可能会改变 或者至少我想将可能的平台差异集中在一个单一的平台上 点 可
  • 使用多个条件过滤 EAV 表

    我有 2 张桌子 Table objects object id object group id Table attributes attr id attr object id attr property id attr value 现在
  • 在 Angular 2 中重新渲染数据表 - dtInstance.then 错误

    我的 Angular 2 应用程序中有一个组件 它有一个下拉列表和一个数据表 根据从下拉列表中选择的名称 我想在数据表中显示详细信息 HTML div div
  • 异步和等待:多个等待表达式

    我在理解如何使用 async 和 wait 工作时遇到了一些困难 据我所知 当异步方法命中等待表达式时 该方法立即返回 并且在将来的某个时刻等待表达式返回并且该方法继续执行 那么 我不明白的是 当异步方法包含多个等待表达式时会发生什么 当执
  • 使用 model.matrix 进行 One-hot 编码

    model matrix 中有一些我不明白的东西 当我输入一个没有截距的二进制变量时 它返回两个级别 gt temp data lt data frame x sample c A B 1000 replace TRUE gt temp d
  • Xamarin Forms - 选项卡式视图?

    我需要创建一个弹出窗口 其中会有一些选项卡 每个选项卡都包含一个列表视图 我知道有一个 TabbedPage 但我需要一个 TabbedView 以便我可以使用 Xlabs PopupLayout 构建我的弹出窗口 如何在 Xamarin
  • 从私人 CKAN 数据集中下载资源

    我的目标是使用 a CKAN API 或 b CKANAPI CLI 或 c 粘贴器 如果 c 是可能的 下载私有数据集中作为资源保存的文件 我尝试使用 a 下载文件 但未成功 例如使用资源 URL 和urllib2 or requests
  • 获取特定数据的正则表达式

    我有一个可以作为文本框读取的文件 我只想获取之后可用的数据 开始 n 和结束 n
  • 在全屏模式下观看 HTML5 视频时如何捕获键盘事件?

    我需要知道用户在全屏模式下观看 HTML5 视频时何时按下退出键 不幸的是 文档上配置的任何侦听器都不适用 因为当用户以全屏模式观看 HTML5 视频时 系统焦点位于本机视频播放器而不是浏览器上 另一种方法是监听焦点何时从本机视频播放器恢复