2015-12-28 58 views
0

我一直在嘗試使用音頻元素製作此音樂播放腳本。 所以我的問題是我不希望這些函數在加載元數據之前可用。如何在發生事件監聽器後聲明函數

我在這裏使用這個對象。

var MusicPlayer = new Object(); 
MusicPlayer.source; 
MusicPlayer.duration = 0; 
MusicPlayer.Player = new Audio(); 
MusicPlayer.metadataloaded = false; 

我想要的是首先創建一個定義這些函數的函數,這個函數本身由事件偵聽器加載。

function Playerinitialize() 
{ 
MusicPlayer.metadataloaded = true; 
} 

然後

MusicPlayer.Player.addEventListener('loadedmetadata', function() 
{ 

MusicPlayer.duration = this.duration; 
console.log(this.duration); 
console.log(MusicPlayer.duration/60); 
console.log(this.currentTime); 
Playerinitialize(); 

}); 

但它不工作,說currentTime的是不確定的。那麼我怎樣才能做到這一點,我這樣做是爲了防止這個函數被調用,而音頻對象的持續時間是NaN等。這是最有效的方式嗎? 爲什麼我不能使用Prototype向MusicPlayer對象添加函數?

+0

@Rajesh我不太讓你,我明白了回調的基礎知識,但我不能真正明白你的意思(新的在這裏:>)。 – user3621843

回答

0

請看看這個。你會發現關於音頻對象的所有事件處理器和更多你所需要的:Audio

我認爲像這樣的東西應該適合你(編輯):

function MusicPlayer(src, ready){ 
    var player = new Audio(); 

    var controller = { }; 

    controller.play = function(){ 
     player.play(); 
    }; 

    //add to controller all parameters you need here 

    player.onloadedmetadata = function() { 
     //do your things here: after metadata is loaded 

     //add to controller some more parameters 
     //retrieve your object: 

     ready(controller); 

    }; 

    player.src = src; 
} 

var ready = function(controller){ 
    //do with your player what you think is necessary 
    //via controller like: 
    controller.play(); 
} 
+0

非常感謝@blindProgrammer – user3621843