【问题标题】:HTML5 Video - run events if currentTime equals set timeHTML5 视频 - 如果 currentTime 等于设置时间,则运行事件
【发布时间】:2017-12-12 04:25:56
【问题描述】:

我试图在 html5 video 播放时捕捉某些事件。我想在播放期间的 5、10、15、20 和 25 秒标记处触发它们。

下面是我运行的代码:

this.video.addEventListener('timeupdate', (e) => {
  if (e.target.currentTime >= 5) {
    console.log('5 seconds')
  } else if (e.target.currentTime >= 10) {
    console.log('10 seconds')
  }
})

这似乎只适用于第一个if 语句(currentTime >= 5)。它从不运行else if。当我尝试准确并将>= 更改为等于== 的集合时,它甚至根本不运行。

我做错了什么?任何帮助将不胜感激。我也愿意接受其他关于更好方法的建议。

我正在阅读这篇文章,但不确定它是否合适:Syncing content with html5 video

【问题讨论】:

  • 试试 console.log(e.target.currentTime)。它不会准确返回 4.0 或 5.0 秒。因此,您可以修改 if 条件并检查 >= 5 &&

标签: javascript html html5-video dom-events


【解决方案1】:

视频超过第 5 秒后,第一个语句将始终为真,因为第 5 秒之后的所有秒都是>=5,因此它永远不会落入else。你有 2 种方法提前

1) 使用范围:

this.video.addEventListener('timeupdate', (e) => {
    if (5 <= e.target.currentTime && e.target.currentTime < 10) {
        console.log('5 seconds')
    } else if (10 <= e.target.currentTime && e.target.currentTime < 25) {
        console.log('10 seconds')
    }
});

2) 反向(就地)if/else

this.video.addEventListener('timeupdate', (e) => {
    if (e.target.currentTime > 25) {
        console.log('25+ seconds')
    } else if (e.target.currentTime > 20) {
        console.log('25-20 seconds')
    } else if (e.target.currentTime > 15) {
        console.log('20-15 seconds')
    }
});

【讨论】:

  • 感谢@nikc.org。这似乎工作得很好。
  • 你很善良。然而,应该得到所有荣誉的是@Colin Cline,而不是我。
  • @nikc.org 不用担心,谢谢您的编辑。但是在您的编辑获得批准后,我失去了 20 个代表,这是错误还是这只是 SO 规则的一部分(编辑后是否发生了点赞?)? PS我检查了所有活动选项卡,没有人对我投反对票,但是在我的浏览器中的一个选项卡中,我在您进行编辑之前有此页面,而在另一个页面中有您的编辑(有些第一个已超时且未刷新),但有 20 2 个标签中的代表差异。
  • 老实说,我不知道,但我认为这将是一个奇怪的功能。
  • @ColinCline 据我所知,我的编辑不应该让您失去任何声誉,请查看此处的“您何时失去声誉”部分:stackoverflow.com/help/whats-reputation
猜你喜欢
  • 1970-01-01
  • 2014-03-09
  • 2011-03-11
  • 1970-01-01
  • 2013-12-12
  • 2018-08-27
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多