2012-03-19 117 views
6

HTML5视频timeupdate事件我有一个<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)正在正常工作。

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

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

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

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

回答

1

因此,正如编辑中对我的问题所述,我用一种简单而相当愚蠢的方法解决了这个问题。只需要:

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

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

在旁边注意:奇怪的是,将preload设置为auto确实会触发预加载视频,但似乎并未初始化播放头。

2

该事件仅在视频初始化后才会调度。就像您在编辑注释中指出的那样,在其中播放()和暂停()视频,这会预载视频。同样的情况发生时,如果使用带自动预加载属性(自动=笔者认为,在加载页面时,浏览器应该加载整个视频)

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

,但我想你回答了你自己的问题?

+0

因此,在视频首次启动之前,无法检测视频的播放头是否已移动? – m90 2012-03-19 14:12:35

+1

也许我们正在交叉讨论,但是如何寻找一个尚未加载(或正在加载)的视频?您的控件是否始终显示?你有这个案例的简单例子吗?! ..也许这个网站也有帮助:http://www.w3.org/2010/05/video/mediaevents.html现场实例中所有事件的列表。寻求可能是你的属性?! – longilong 2012-03-19 14:44:09

+0

这可能有点复杂,但请参阅:http://goo.gl/uJyod - 您可能想要取消隐藏“

2

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

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