HTML5视频timeupdate事件未触发

m90*_*m90 6 javascript video events html5-video

<video>我的页面上有一个元素:

<video id="myVideo">
    <source src="vid.mp4" type="video/mp4" />
    <source src="vid.ogg" type="video/ogg" />
</video>
Run Code Online (Sandbox Code Playgroud)

在我的JS中,它读取:

var v = $('#myVideo')[0];
v.addEventListener('timeupdate',function(){
   alert('I changed');
},false);
Run Code Online (Sandbox Code Playgroud)

现在我将启动我的控制台并键入:

$('#myVideo')[0].currentTime = 2;
Run Code Online (Sandbox Code Playgroud)

显示的帧将更改,但事件不会触发.根据规格timeupdate应该开火的时候currentTime was changed,所以我不认为我使用的是错误的事件?我正在使用的所有其他事件(即play&ended)工作得很好.

有很多类似的问题,但所有这些似乎都是过时的错误?这是另一个错误(我在Chrome 17和FF10中测试过)还是在事件结构中做了什么改变?还是我错过了一些完全不同的东西?

编辑: 我刚刚注意到这个问题只会在视频尚未播放时发生.所以当我这样做时:

$('#myVideo')[0].play();
$('#myVideo')[0].pause();
$('#myVideo')[0].currentTime = 2;
Run Code Online (Sandbox Code Playgroud)

事件会像它应该的那样发射.

m90*_*m90 1

因此,正如我的问题的编辑中已经指出的那样,我用一种简单且相当愚蠢的方法解决了这个问题。做就是了:

video.play();
video.pause();
Run Code Online (Sandbox Code Playgroud)

“初始化”播放头。timeupdate这样一来,即使没有人启动该视频,人们也应该能够获取事件。

附带说明:奇怪的是,设置preloadauto确实会触发视频的预加载,但它似乎没有初始化播放头。