HTML5视频时间更新事件未启动
HTML5 video timeupdate event not firing
我的页面上确实有一个<video>
元素:
<video id="myVideo">
<source src="vid.mp4" type="video/mp4" />
<source src="vid.ogg" type="video/ogg" />
</video>
在我的JS中,它写道:
var v = $('#myVideo')[0];
v.addEventListener('timeupdate',function(){
alert('I changed');
},false);
现在我将启动我的控制台并键入:
$('#myVideo')[0].currentTime = 2;
显示的帧将发生更改,但事件不会启动。根据规范,timeupdate
应该在currentTime was changed
时触发,所以我不认为我使用了错误的事件?我正在使用的所有其他事件(即play
和ended
)都运行良好。
有很多类似的问题,但所有这些似乎都是过时的bug?这是另一个错误(我在Chrome 17和FF10中测试过)还是事件结构发生了任何变化?还是我错过了完全不同的东西?
编辑:我只是注意到,只有当视频还没有播放时,才会出现这个问题。所以当我这样做的时候:
$('#myVideo')[0].play();
$('#myVideo')[0].pause();
$('#myVideo')[0].currentTime = 2;
活动将如期举行。
只有在初始化视频后才会调度事件。就像你刚才在编辑评论中指出的那样,你在哪里播放()和播放()视频,这会预加载视频。如果您将preload属性与auto一起使用(auto=author认为浏览器应该在加载页面时加载整个视频)
<video preload="auto|metadata|none">
但我猜你自己回答了你的问题?!
要使用的事件不是"timeupdate",我认为它是"seeked"
当您更改currentTime时,首先会发生"查找"事件,然后一旦视频与所选时间同步,就会触发"查找"活动。
我用谷歌28测试了这个,它在不需要控件上的.play()+.pause()的情况下就可以工作了。
因此,正如在编辑我的问题时所说,我用一种简单而愚蠢的方法解决了这个问题。只需:
video.play();
video.pause();
以"初始化"播放头。然后,即使没有人启动视频,也应该能够获得timeupdate
事件。
附带说明:奇怪的是,将preload
设置为auto
确实会触发视频的预加载,但它似乎并没有初始化播放头。
- 从控制器返回后Ajax启动事件激发
- 触摸启动事件未在iframe iOS 6中启动
- preventDefault之后的重新启动事件
- 如何获取在一系列事件中启动事件的元素
- 当窗口打开时,IE9在加载前启动事件
- 我的 JS 代码中的会话启动事件
- 仅当前一个事件完全完成时,才启动事件
- jQuery UI - 如何区分拖动/调整大小启动事件和单击事件
- Javascript “卡住”键(未注册的键启动事件)
- pace.js:“启动”事件未触发
- 在第一次触摸启动事件时禁用所有点击事件是个好主意吗?
- 如何将“拖动启动”事件与 CKEditor 实例分离
- 触摸启动事件上的Javascript触发函数
- 绑定到触摸启动事件,导致自动对焦集中在Mobile Safari中的任何单击上
- 触摸启动事件未在原来隐藏的按钮上工作
- 有没有一种方法可以使触摸启动事件不会触发点击事件
- 检测浏览器窗口是否处于活动状态,并在窗口再次处于活动状态后启动事件[JavaScript]
- 如何检测浏览器是否支持手势启动事件
- 首先启动事件,然后转到url
- 在IE7中无法捕获鼠标启动事件