Javascript 如何在事件侦听器occcurs之后声明函数
我一直在尝试用音频元素制作这个音乐播放脚本。 所以我的问题是,我不希望这些函数在加载元数据之前可用 我用的是这个物体Javascript 如何在事件侦听器occcurs之后声明函数,javascript,html,audio,html5-audio,Javascript,Html,Audio,Html5 Audio,我一直在尝试用音频元素制作这个音乐播放脚本。 所以我的问题是,我不希望这些函数在加载元数据之前可用 我用的是这个物体 var MusicPlayer = new Object(); MusicPlayer.source; MusicPlayer.duration = 0; MusicPlayer.Player = new Audio(); MusicPlayer.metadataloaded = false; 我尝试的是首先创建一个定义这些函数的函数,该函数本身由事件侦听器加载 functi
var MusicPlayer = new Object();
MusicPlayer.source;
MusicPlayer.duration = 0;
MusicPlayer.Player = new Audio();
MusicPlayer.metadataloaded = false;
我尝试的是首先创建一个定义这些函数的函数,该函数本身由事件侦听器加载
function Playerinitialize()
{
MusicPlayer.metadataloaded = true;
}
然后
但是说currentTime未定义是行不通的。那么我该如何实现这个呢?此外,我这样做是为了防止在音频对象持续时间为NaN时调用这个函数。这是最有效的方法吗?
为什么我不能使用Prototype向MusicLayer对象添加函数?请看这个。您将在此处找到所需的所有EventHandler和有关音频对象的更多信息: 我认为这样的东西应该适合你(编辑):
@Rajesh我不太明白你的意思,我理解回调的基本原理,但我真的不明白你的意思(新的:>)。非常感谢@blindProgrammer
MusicPlayer.Player.addEventListener('loadedmetadata', function()
{
MusicPlayer.duration = this.duration;
console.log(this.duration);
console.log(MusicPlayer.duration / 60);
console.log(this.currentTime);
Playerinitialize();
});
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();
}