如何使用 YouTube IFrame Player API 监听时间更改事件?

2024-01-07

我在 YouTube IFrame Player API 文档上找不到任何方法来监听时间变化(因此我可以在 UI 中显示视频的当前时间/持续时间)。有没有办法在不轮询的情况下做到这一点getCurrentTime()?


YouTube IFrame Player API 没有公开任何监听时间更改更新的方法,但由于它在内部使用postMessage https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage要在 IFrame 和主窗口之间进行通信的事件,您可以向窗口添加一个侦听器来侦听它们并仅对时间更改做出反应:

// Instantiate the Player.
function onYouTubeIframeAPIReady() {
  var player = new YT.Player("player", {
    height: "390",
    width: "640",
    videoId: "dQw4w9WgXcQ"
  });

  // This is the source "window" that will emit the events.
  var iframeWindow = player.getIframe().contentWindow;

  // So we can compare against new updates.
  var lastTimeUpdate = 0;

  // Listen to events triggered by postMessage.
  window.addEventListener("message", function(event) {
    // Check that the event was sent from the YouTube IFrame.
    if (event.source === iframeWindow) {
      var data = JSON.parse(event.data);

      // The "infoDelivery" event is used by YT to transmit any
      // kind of information change in the player,
      // such as the current time or a playback quality change.
      if (
        data.event === "infoDelivery" &&
        data.info &&
        data.info.currentTime
      ) {
        // currentTime is emitted very frequently,
        // but we only care about whole second changes.
        var time = Math.floor(data.info.currentTime);

        if (time !== lastTimeUpdate) {
          lastTimeUpdate = time;
          console.log(time); // update the dom, emit an event, whatever.
        }
      }
    }
  });
}

现场观看 https://codepen.io/zavan/pen/PoGQWmG.

请注意,这依赖于私有 API,该 API 可能随时更改,恕不另行通知。

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

如何使用 YouTube IFrame Player API 监听时间更改事件? 的相关文章

随机推荐

  • 防止Button继承Parent的BackColor

    当我有一个父控件时BackColor以外SystemColors Control 但我在父控件上有按钮 我想在系统中绘制它们 但是 当我不改变BackColor按钮的颜色以父级的颜色绘制 当我改变BackColor按钮的SystemColo
  • 将 MySQL innodb 数据库加载到内存中

    我有一个 1 9GB 的 MySQL innodb 数据库 通过以下命令显示 SELECT table schema Data Base Name sum data length index length 1 048 576 as Data
  • 对 ignite 端口的 DoS 攻击

    我使用的ignite是嵌入式的 ignite使用两个端口 当我测试端口的dos攻击时 ignite出现java lang OutOfMemoryError Direct buffer memory 2021 12 01 14 12 59 0
  • malloc 错误 C++ [重复]

    这个问题在这里已经有答案了 可能的重复 malloc c 3074 错误 https stackoverflow com questions 1097995 malloc c3074 error 我在执行 C 代码时遇到这个奇怪的错误 ma
  • 具有嵌套命名空间的 Rails 4 引擎

    我找不到一种方法来生成在 Rails 下具有嵌套命名空间的引擎 每次这样做时 我基本上都必须手动编辑和移动生成的文件 Rails 中真的不支持嵌套命名空间吗 似乎不太可能 在公司 我们对所有内容进行命名 如下所示 公司名称 服务名称 模块
  • 在 Sass 中为数字添加单位

    我正在尝试创造动态价值 但到目前为止都失败了 创建的像素值似乎失去了用于计算的能力 numericValue 30 pixelValue numericValue px also tried pixelValue numericValue
  • 链接具有公共静态库的静态库的正确过程是什么?

    我正在开发一个静态库 名为Silicon https github com reidmain Silicon 我用于所有 iOS 应用程序 因为我不想创建一个可能难以维护的大型静态库 所以我创建了许多较小的静态库 并将它们作为子模块附加 截
  • UINavigationController 的 addChildViewController 和 topViewController 之间的相互作用

    我有类似模态视图控制器的东西 我需要将其显示在其他视图控制器上方 我没有使用常规模态控制器功能 presentViewController 和朋友 因为我需要更好地控制这个过程 相反 我使用视图控制器包含功能 addChildViewCon
  • 检测 iPhone 屏幕上的亮点/暗点

    我想检测并标记图像上最亮和最暗的点 例如 我正在创建 AVCaptureSession 并使用 AVCaptureVideoPreviewLayer 在屏幕上显示视频帧 现在 在这个相机输出视图上 我希望能够标记当前最暗和最亮的点 我必须读
  • IE框架边框替代

    对于这行代码 我收到此错误 validator w3 org XHTML 1 0 Transitional there is no attribute frameBorder 我在用着frameBorder因为 IE8 在 iframe 上
  • 有人使用 Android NDK 构建过 ZBar 吗?

    我正在尝试将 ZBar 集成到我的 Android 应用程序中 但无法构建本机库 我想知道是否有人以前做过并愿意与我分享 我知道这个问题很老了 但是 ZBar 提供了 android SDK http sourceforge net pro
  • 可以使用单个正则表达式来解析函数参数吗?

    Problem 有一个程序文件 在文件中的某个位置包含以下代码片段 food apples oranges pears tomato 该函数可以包含任意数量的参数 但它们必须是用逗号分隔的字符串 所有参数字符串都是小写单词 我希望能够使用正
  • 我应该如何记录继承的成员? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 考虑一下我有一个复杂的类结构 其中许多元素继承自其他元素 我可能有一个方法GetStuff string stuffName int count
  • 以编程方式检索 iPhone 上的内存使用情况

    我正在尝试以编程方式随时检索我的 iPhone 应用程序正在使用的内存量 是的 我知道 ObjectAlloc Leaks 我对这些不感兴趣 只是想知道是否可以编写一些代码并获取正在使用的字节数并通过 NSLog 报告它 Thanks 要获
  • 在 Swift 4 中调整 UISwitch 的大小

    我想更改 Swift 4 中 UISwitch 的默认大小 我查看了各种选项 但它们都与 v3 相关并且不起作用 请问有人可以建议一个在 Swift 4 中以编程方式执行此操作的示例吗 谢谢你 Edit 我尝试过以下示例 switchTes
  • 如何登录 SailsJS

    登录 SailsJS 的实际语法是什么 文档没有任何内容 但在网站的路线图中找到了以下行 将 Sails log winston 包装器 作为一个单独的模块拉出来 这样它就可以 由水线使用 我想象它是这样的 Sails log Sails
  • 三行模态,固定标题、底行和可滚动的中间行

    我正在尝试创建一个具有顶部 中间和底部的模态 顶部始终是固定高度 底部必须 粘 在底部上 并且可能会有所不同 其中的所有内容和元素都必须从底部构建 因此 如果有一行文本 底部将是该行的高度 如果有 3 或 4 行文本 底部会根据需要向上推
  • 如何在PHP中使用其原始参数调用父类构造函数

    我有这个代码 class A var arr array function construct para echo Not called class B extends A function construct arr new Item 由
  • LOCK_NB 被忽略

    运行此代码两次 fp fopen test test wb if flock fp LOCK NB LOCK EX fwrite fp data echo written sleep 5 else echo skipped ok flock
  • 如何使用 YouTube IFrame Player API 监听时间更改事件?

    我在 YouTube IFrame Player API 文档上找不到任何方法来监听时间变化 因此我可以在 UI 中显示视频的当前时间 持续时间 有没有办法在不轮询的情况下做到这一点getCurrentTime YouTube IFrame