如何在事件监听器发生后声明函数

时间:2015-12-28 13:26:28

标签: javascript html5 audio html5-audio

我一直试图用Audio元素制作这个音乐播放脚本。 所以我的问题是在加载元数据之前我不希望这些功能可用。

我在这里使用这个对象。

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未定义。那么我如何实现这一点呢,我这样做是为了防止在Audio对象持续时间为NaN等时调用这个函数。这是最有效的方法吗? 为什么我不能使用Prototype将功能添加到MusicPlayer对象?

1 个答案:

答案 0 :(得分: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();
}