2014-01-22 29 views
0
function getVideoDuration() { 

    var myVideo = document.getElementsByTagName('video')[0]; 

    myVideo.addEventListener('loadedmetadata', function { 
     var duration = (Math.round(myVideo.duration)); 
     return duration; 
    }); 
} 

我會簡單直接...從的addEventListener函數返回值

我想離開內add.EventListener功能的持續時間值。然而,這並不按預期工作,我認爲這是不可能的...

我說錯了嗎?如果是這樣,我有什麼樣的替代方案?

在此先感謝!

回答

1

你不能這樣做你試圖做到這一點。事件發生在未來的某個時間。當調用getVideoDuration()時不會發生。相反,你需要把任何需要持續時間的代碼放在eventlistener中檢索持續時間的地方,或者從那裏調用一個函數並且傳遞持續時間值。

這裏是您的代碼排序的擊穿:

  1. 你叫getVideoDuration()
  2. 你先去<video>標籤。
  3. 您爲loadedmetadata事件添加事件偵聽器。
  4. 您的getVideoDuration()函數完成並退出並不返回任何內容。
  5. 然後,一段時間後,loadedmetadata事件發生在該視頻標籤上,並且您的事件處理程序被調用。您獲取持續時間並將其返回到事件系統中(例如,它無處不在,並且不被任何代碼使用)。

這裏是你可以做到這一點的一種方法:

function getVideoDuration() { 

    var myVideo = document.getElementsByTagName('video')[0]; 

    myVideo.addEventListener('loadedmetadata', function { 
     var duration = (Math.round(myVideo.duration)); 
     // call a function that needs the duration 
     myFunction(duration); 
    }); 
} 
+1

@zppinto - 看,我已經加入到我的答案代碼示例。 – jfriend00

+0

嗯......所以這就是爲什麼我不能使用這種方法!我已經懷疑它了!感謝您的幫助 :) – zppinto