seeking 表示播放器开始跳转,此时 currentTime 未更新,适合禁用控制或显示加载状态;seeked 表示跳转完成,currentTime 已准确更新,是同步 UI 或续播的可靠时机。

当用户拖动视频或音频进度条时,seeking 事件被触发,表示播放器正在尝试跳转到新位置;而 seeked 事件则在跳转完成、实际播放位置更新后才触发。两者关键区别在于:seeking 是“开始找”,seeked 是“已经找到”。
seeking 事件的触发时机与用途
seeking 在用户发起跳转(如鼠标松开进度条、调用 currentTime 赋值)后立即触发,此时播放器尚未完成解码或定位,currentTime 可能仍为旧值,画面也未更新。它适合用于临时禁用控制、显示加载状态或记录跳转意图。
- 不能依赖 seeking 时的
currentTime获取目标位置——应提前缓存或从事件源推断 - 频繁拖动可能连续触发多个 seeking,建议防抖处理,避免重复操作
- 移动端 touchmove 中直接设 currentTime 也可能触发 seeking,需注意手势冲突
seeked 事件才是位置跳转完成的可靠信号
seeked 在播放器完成定位、缓冲至少一帧、且 currentTime 已准确反映新位置后触发。此时可安全执行 UI 同步、日志上报、自动播放恢复等操作。
- 务必在此事件中读取
currentTime,确保数值真实有效 - 若跳转失败(如超出范围、资源损坏),seeked 不会触发,但会触发
error或保持seeking === false - 结合
paused状态判断:seeked 后若原为播放态,可调用play()续播
手动跳转时的典型逻辑链
通过脚本设置 currentTime 实现跳转,完整流程如下:
立即学习“前端免费学习笔记(深入)”;
- 赋值
video.currentTime = 65.3→ 触发 seeking,video.seeking变为 true - 浏览器加载对应时间码的数据(可能触发
waiting或canplay) - 定位成功后,
currentTime更新,触发 seeked,video.seeking变回 false - 若该时间点不可达(如未加载、格式不支持),seeked 不触发,可监听
error或检查seeking长时间为 true
常见误区与调试建议
实际开发中容易混淆行为边界,导致 UI 不同步或功能异常:
- 误在 seeking 中更新进度条显示:会导致“跳转中显示目标位置”,视觉上提前,实际画面未到
- 忽略 seeked 的异步性:直接在
currentTime = x后立刻读值,拿到的仍是旧值 - 未处理 seek 失败:比如 MP4 文件无关键帧索引,拖到非 I 帧位置可能卡住,需降级处理(如跳到最近可播时间)
- 调试时可用
console.log(e.type, video.currentTime, video.seeking)监听 seeking/seeked/error,观察状态流转
掌握 seeking 和 seeked 的触发边界,才能让进度控制既响应及时又准确可靠。不复杂但容易忽略。











