javascript - HTML5 视频在寻求结束时如何显示最后一个视频帧?
问题描述
当我手动调用时:
player.currentTime = player.duration
(1) 视频currentTime
跳到最后(期望的和预期的)
(2)当我点击播放时,视频从头开始播放(期望和预期)
(3) 视频没有更新以显示最后一帧(不希望的和意外的)
目前,我必须这样做:
player.currentTime = player.duration - 0.0001
player.play()
这会导致视频跳到接近结尾,然后继续播放,然后在到达结尾时几乎立即停止,这解决了我的问题,即视频现在显示最后一帧。
但是,这感觉有点 hacky,不能像简单地设置当前时间那样快。有更好的解决方法吗?谢谢
注意:寻求结束操作必须支持代码程序化代码执行(例如响应按钮单击的代码执行)。我没有使用内置于搜索/擦洗栏的播放器(效果很好)。
解决方案
我想我找到了答案,在 Firefox 设置中
player.currentTime = player.duration
触发“结束”事件,因此视频结束(在搜索栏结束时没有间隙)。
但是在 chrome 中这是不同的,在 chrome 中设置player.currentTime = player.duration
不会触发“结束”事件,并且搜索栏有轻微的间隙结束(我认为这就是你所指的)。链接到我的测试jsfiddle。
TL:DR 好的老供应商问题
同样player.currentTime = player.duration + 99999
在 chrome 中设置不会触发“结束”事件,并且搜索栏在结束时仍然有间隙。
因此,目前针对此错误的解决方法是
stopButton.addEventListener('click', () => {
player.currentTime = player.duration
player.play() // trick for chrome
})
// to verify
player.addEventListener('ended', (e) => console.log(e.target.ended ? "ended" : "not ended"))
此代码适用于 firefox 和 chrome,结果完全相同。
推荐阅读
- azure - 为 azure dns 服务托管的公共 IP 添加别名
- laravel - 如何在 Laravel 中设置 3 个模型之间的关系?
- azure-devops - Azure Pipeline 使用服务主体连接到 SQL DB
- javascript - 使用jquery将父项克隆到子列表中
- sqlite - 如何从 xamarin.forms 的集合视图中删除项目?
- mysql - 我想将两个表及其列选择为单个结果
- python - 通过输入在 2d 列表中导航路径
- java - 预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 x-xsrf-token
- python-3.x - 使用 fb 应用授予的所有权限获取 facebook 页面访问令牌
- url - GatsbyJS - URL 中的哈希后正斜杠或数字崩溃应用程序