2012-03-19 147 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()。