2014-02-20 123 views
4

我很絕望。 爲什麼這個工程:html5聽衆loadeddata不能確定工作

var myVid=document.getElementById("movie"); 
myVid.onloadeddata=console.log("Browser has loaded the current frame"); 

,這並不: www.x.opteynde.com

我的目標:

myVid.addEventListener("loadeddata", function() { 
    alert("loadeddata"); 
    }); 

都在Firefox 27

她我的頁面,它喊試運行是獲取視頻的加載時間。

回答

4
var myVid = document.getElementById("movie"); 
myVid.onloadeddata = console.log("Browser has loaded the current frame"); 

這不符合你的期望。你沒有綁定到myVid.onloadeddata的函數,你立即執行console.log(),並將其返回值設置爲myVid.onloadeddata

正確的方式做到這一點,就是:

myVid.onloadeddata = function() { 
    console.log("Browser has loaded the current frame"); 
} 

因此,這可以解釋爲什麼這將輸出的東西在您的控制檯。

開以loadeddata

definition of loadeddata是:

用戶代理可以在用於第一時刻 當前播放位置呈現媒體數據。

在略小於正式講,這意味着:「用戶代理可以呈現實際視頻的至少一幀」

在我的Firefox錯誤控制檯我看到這些錯誤:

Specified "type" attribute of "video/mp4" is not supported. Load of media resource fliege.mp4 failed. 
HTTP load failed with status 404. Load of media resource http://www.x.opteynde.com/fliege.ogv failed. 
All candidate resources failed to load. Media load paused. 

顯然,火狐無法呈現從它不能加載視頻的幀,所以這404似乎是你的問題。

P.S.
另請注意,在您點擊'播放'按鈕之前,您不會觸發this exampleloadeddata

+0

是的這就是爲什麼我一定要提到你的答案。我只是在延伸。 Gj btw – SpYk3HH

+0

對不起,這不是我的問題。我知道如何添加一個函數,如myVid.onloadeddata ... 這很好用:myVid.onloadeddata = console.log(「Browser has loaded the current frame」); 問題是:爲什麼addEventListener不起作用。 – hamburger

+1

@hamburger那麼,你發佈的代碼是不正確的,並且(和404一起)很可能是你混淆的源頭。 – Carpetsmoker

0

Carpetsmoker大爆炸。

但是,我的問題是,你有它標記爲jQuery,爲什麼不使用jQuery?

所以我只是添加了一些jQuery提示他的答案。

在jQuery中,您可以使用CSS選擇器輕鬆獲取元素。例如,你的ID movie元素是容易得到的:

var myVid = $('#movie'); 

從那裏,你可以輕鬆地使用它。

我不熟悉的你在做什麼,但一般在分配jQuery的事件一樣簡單:

$('#movie').on('event', function(e) { /* do work */ }); 

這就是說,我不是100%肯定$('#movie').on('loadeddata '將實際工作。我沒有帶打了媒體很多,但我知道,你也可以看看jQuery的.load()

最後但並非最不重要的,如果你需要使用香草JS實際元素,只是簡單的做這樣的事情:

var myVid = $('#movie')[0]; // much easier to read and reuse than .getElementByID 
// however take note, this is more JS to run thus causing a a lil less speed 
myVid.onloaddata = function() { /* do work */ }; 
+1

是的,jQuery顯然會更好。 (''movie')。on('loadstart',function())('loaddata'將會按照預期工作。 – Carpetsmoker

+0

$('#movie')。on e){console.log(「_ onloadstart third execution」);}); 也不能工作 – hamburger

2

經過兩天的搜索,我找到了解決方案。 要發射它必須是video.load()之前的事件。 html-video-markup中的循環和自動播放標籤不夠。

+0

嘗試'$('#movie')。load(function(e){/ * do work * /}); ' – SpYk3HH

0

我在這兒得到了同樣的問題,問題是我在body.onload事件中註冊了事件監聽器。

window.onload = function() { 
      myVideo.addEventListener('loadeddata', function() { 
      alert('loadeddata'); 

     }); 
} 

當window.onload事件被觸發時,myVideo.loadeddata已經被執行。