h5 video 暂停后切前后台导致视频提前
背景
使用 h5 video 开发的页面,对于需要视频定帧的场景,会通过调用 video.pause() 来使视频暂停,然而,当切到后台再重新切回前台,video 会重新出发 timeupdate 事件,并将当前的时间提前 1-2s 左右,从而导致视频定的帧改变。
分析
该问题可能是浏览器内部原因,因为它并没有重新触发 play 事件,仅仅是触发了 timeupdate 事件来改变了当前 video 的时间,而且仅第一次前后台切换会触发 timeupdate 事件。
解决
在手动调用视频暂停的时候,在判断视频没有暂停的状态情况下,这里保存当前暂停时的 video.currentTime,然后在监听到前后台切换的时候,判断如果视频依然为暂停状态,则重置 video.currentTime 为刚才保存的值。
pause() { if (!advideo.paused) { this.pauseCurrentTime = advideo.currentTime advideo.pause() } }, stopControl (flag) { try { nextTick(() => { if (this.canPlay()) { advideo && advideo.play() } else { this.pause()
// 这里为前后台切换后仍然为暂停的场景 if (flag === 'viewableChange') { // 前后台切换浏览器会触发 timeupdate 事件,使视频暂停的时间提前 2s 左右,所以需要在这里重置回暂停之前的时间 advideo.currentTime = this.pauseCurrentTime } } }) } catch (error) { } },
注意,使用此种方法后,对于没有手动暂停的场景,自动播放结束后,也要监听 end 事件,更新 this.pauseCurrentTime = advideo.currentTime
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2022-12-27 js判断空对象的方法
2018-12-27 Fiddler抓包手机代理配置
2017-12-27 vue实现文章内容过长点击阅读全文功能
2017-12-27 vue获取dom元素注意问题
2017-12-27 input框取消光标颜色手机端不生效
2016-12-27 thinphp框架的项目svn重新检出后的必备配置