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

页面加载时若视频同时触发两个事件监听,如何停止第一个事件的运行?

实现方案

你可以通过以下两种方式满足需求:


方案1:共享状态标识位(通用可恢复)

通过一个闭包/全局变量记录play事件是否已触发,suspend事件执行前先校验该状态,适合后续还需要恢复suspend执行能力的场景:

// 初始化控制变量,false代表play事件还未触发
let hasPlayFired = false

obj.addEventListener('suspend', () => {
  // 仅play未触发时才执行suspend逻辑
  if (!hasPlayFired) {
    // 你的suspend业务代码
  }
});

obj.addEventListener('play', () => {
  // 先标记play已触发,阻断suspend逻辑
  hasPlayFired = true
  // 你的play业务代码
});

如果存在suspend比play先触发的极端场景,可以给suspend逻辑加0ms延迟,确保状态判断时play的标记逻辑已经执行:

let hasPlayFired = false

obj.addEventListener('suspend', () => {
  setTimeout(() => {
    if (!hasPlayFired) {
      // 你的suspend业务代码
    }
  }, 0)
});

obj.addEventListener('play', () => {
  hasPlayFired = true
  // 你的play业务代码
});

方案2:动态移除suspend监听器(性能更优)

如果play触发后再也不需要执行suspend逻辑,可以直接移除suspend的事件监听器,注意需要把suspend的回调定义为具名函数才能正常移除:

// 定义具名的suspend回调
function suspendHandle() {
  // 你的suspend业务代码
}

obj.addEventListener('suspend', suspendHandle);

obj.addEventListener('play', () => {
  // 移除suspend监听器,后续不会再触发该事件逻辑
  obj.removeEventListener('suspend', suspendHandle)
  // 你的play业务代码
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:03