seeking 和 seeked 是 html5 音视频元素的原生事件:seeking 在跳转开始时触发(element.seeking 为 true),seeked 在跳转成功完成、currenttime 更新后触发(element.seeking 变 false)。

seeking 和 seeked 是 HTML5 <video></video> 与 <audio></audio> 元素提供的原生事件,专门用于捕获用户拖拽进度条(即手动跳转播放位置)的开始与完成两个关键阶段。
seeking:跳转动作开始时触发
当用户点击或拖拽进度条、调用 element.currentTime = x 且媒体尚未完成定位时,seeking 立即触发。它不保证跳转已完成,只表示“正在寻求新位置”。
- 可能频繁触发(如拖拽过程中持续触发)
- 此时
element.seeking为true - 适合用于临时禁用 UI、显示加载态(如暂停按钮变灰、加旋转图标)
seeked:跳转成功完成后触发
当媒体已定位到目标时间点、并准备好继续播放时,seeked 触发。此时 element.seeking 变为 false,element.currentTime 已更新为期望值。
- 仅在跳转真正就绪后触发一次(即使多次拖拽,每次成功只触发一次)
- 适合恢复 UI、更新时间显示、或自动恢复播放(如“拖完继续播”逻辑)
- 注意:若跳转失败(如视频未缓冲到该位置),
seeked不会触发,但会触发error或stalled
典型监听写法与注意事项
直接绑定事件即可,无需额外 polyfill:
const video = document.querySelector('video');
video.addEventListener('seeking', () => {
console.log('正在跳转到', video.currentTime);
// 例如:显示 loading 指示器
});
video.addEventListener('seeked', () => {
console.log('已跳转到位,当前时间', video.currentTime);
// 例如:隐藏 loading,更新时间文本,或 autoPlay
});
- 确保在
loadedmetadata之后绑定,避免早期事件丢失 - 不要依赖
timeupdate替代seeked—— 它是周期性触发的,无法准确标识跳转完成 - 若需区分用户拖拽与脚本设置,可结合
mousedown/touchstart在进度条上做标记
与 currentTime 设置的配合逻辑
通过 JS 修改 currentTime 同样会触发这两个事件:
-
video.currentTime = 60;→ 立即触发seeking - 浏览器加载/解码完第 60 秒帧后 → 触发
seeked - 若视频未加载到该时间(如未开启
preload="auto"或网络慢),seeked可能延迟甚至失败
因此,实际开发中建议配合 canplay 或 canplaythrough 判断缓冲状态,避免无效跳转。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











