HTML5视频timeupdate事件未触发

时间:2012-03-19 12:31:26

标签: javascript events video html5-video

我的页面上有一个<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&amp; ended)工作得很好。

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

修改 我刚刚注意到只有在视频尚未播放时才会出现此问题。所以当我这样做时:

$('#myVideo')[0].play();
$('#myVideo')[0].pause();
$('#myVideo')[0].currentTime = 2;

事件会像它应该发射一样。

3 个答案:

答案 0 :(得分:2)

仅在视频初始化后调度该事件。就像你刚刚在你的编辑评论中指出的那样,你可以播放()和暂停()视频,它可以预加载视频。同样应该发生,如果你使用auto的preload属性(auto = author认为浏览器应该在页面加载时加载整个视频)

<video preload="auto|metadata|none">

但我猜你自己回答了你的问题?!​​

答案 1 :(得分:2)

使用的事件不是“timeupdate”,我认为它是“寻找” 当您更改currentTime时,首先会发生“搜索”事件,然后只要视频与所选时间同步,就会触发“搜索”事件。

我使用Google 28进行了测试,并且无需在控件上使用.play()+ .pause()即可。

答案 2 :(得分:1)

所以,正如在我的问题的编辑中已经说明的那样,我用一种简单而相当愚蠢的方法解决了这个问题。只是做:

video.play();
video.pause();

“初始化”播放头。然后,即使没有人启动视频,也应该能够获得timeupdate个事件。

侧面说明:奇怪的是,将preload设置为auto会触发视频的预加载,但似乎无法初始化播放头。