我的页面上有一个<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;
事件会像它应该发射一样。
答案 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
会触发视频的预加载,但似乎无法初始化播放头。