Javascript HTML5视频时间更新事件未触发

Javascript HTML5视频时间更新事件未触发,javascript,events,video,html5-video,Javascript,Events,Video,Html5 Video,我的页面上确实有一个元素: <video id="myVideo"> <source src="vid.mp4" type="video/mp4" /> <source src="vid.ogg" type="video/ogg" /> </video> 现在,我将启动控制台并键入: $('#myVideo')[0].currentTime = 2; 显示的帧将更改,但事件不会触发。根据规范,timeupdate应该在curre

我的页面上确实有一个
元素:

<video id="myVideo">
    <source src="vid.mp4" type="video/mp4" />
    <source src="vid.ogg" type="video/ogg" />
</video>
现在,我将启动控制台并键入:

$('#myVideo')[0].currentTime = 2;
显示的帧将更改,但事件不会触发。根据规范,
timeupdate
应该在
currentTime更改时触发,所以我不认为我使用了错误的事件?我正在使用的所有其他事件(即
播放
&
结束
)都正常工作

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

编辑: 我只是注意到这个问题只有在视频还没有播放时才会发生。因此,当我这样做时:

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

事件将按其应该的方式触发。

事件仅在视频初始化后发送。正如您刚才在编辑评论中指出的,您可以播放()和暂停()视频,从而预加载视频。如果将“预加载”属性与“自动”(auto=author)一起使用,也会出现同样的情况(auto=author认为加载页面时浏览器应该加载整个视频)



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

所以,正如我的问题编辑中所说的,我用一种简单而愚蠢的方法解决了这个问题。只要做:

video.play();
video.pause();
“初始化”播放头。然后,即使没有人启动视频,也应该能够获得
timeupdate
事件

另一方面:奇怪的是,将
preload
设置为
auto
确实会触发视频的预加载,但它似乎并没有初始化播放头。

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


我用Google 28对此进行了测试,它在不需要控件上的.play()+.pause()的情况下工作。

因此,在视频第一次启动之前,无法检测视频的播放头是否已被移动?也许我们的目的不同,但您如何查找尚未加载(或正在加载)的视频?您的控件是否一直显示?你能举个简单的例子吗。。也许这个网站也有帮助:在一个实例中列出所有事件。寻找可能是你的属性?!这可能有点复杂,但请参见:-您可能希望取消隐藏
元素以查看发生了什么。键入
$('#video')[0].currentTime=1进入控制台,视频将更新,但画布表示不会更新(它正在等待
timeupdate
事件)。一旦视频播放完毕,它就会像预期的那样工作。谢谢
<video preload="auto|metadata|none">
video.play();
video.pause();