You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于timeupdate事件实现视频播放每10秒间隔单次触发函数

实现方法

timeupdate事件的触发频率约为每250ms一次,你原有逻辑设置的判断条件是currentTime % 10 < 1,相当于跨过10秒节点后有整整1秒的时间窗口会满足判断规则,窗口内的多次事件触发自然会重复调用目标函数。
解决核心是增加一个标记变量,记录已经触发过事件的10秒节点,只有首次进入新的10秒区间时才执行目标函数,从根源避免重复触发。

基础实现代码

// 记录上一次已经触发过事件的时间节点,初始值为0
let lastTriggeredPoint = 0;

videoPlayer.on('timeupdate', () => {
  const current = videoPlayer.currentTime();
  // 计算当前播放进度对应的10秒整数节点
  const currentPoint = Math.floor(current / 10) * 10;

  // 跳过0秒起点,仅当进入未触发过的新节点时执行逻辑
  if (currentPoint > 0 && currentPoint > lastTriggeredPoint) {
    // 先更新标记,避免重复执行
    lastTriggeredPoint = currentPoint;
    myFunc(currentPoint);
  }
});

边界场景适配

  • 进度条拖动场景:如果用户拖动进度条直接跳过多个10秒节点,可通过循环补全所有被跳过节点的事件触发,适配代码如下:
if (currentPoint > 0 && currentPoint > lastTriggeredPoint) {
  // 逐个触发所有跨过的未触发节点
  for (let point = lastTriggeredPoint + 10; point <= currentPoint; point += 10) {
    myFunc(point);
  }
  lastTriggeredPoint = currentPoint;
}
  • 视频重播场景:监听视频的ended、seeked事件,当检测到播放时间回到0秒附近时,将lastTriggeredPoint重置为0,保证重播到10秒节点时可以正常触发事件。

内容的提问来源于stack exchange,提问作者kdizzle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:54:31