EventListener和音频事件导致错误?

时间:2011-11-21 01:04:54

标签: javascript html5 javascript-events html5-audio

我遇到了一个恼人的错误,基本上我正在使用第三方编辑器运行一个简单的游戏,我在场景开始时启动音频文件,并且在音频结束后我想要goToNextScene()是一个内置函数。我正在使用Buzz JavaScript库。但是我遇到了这个问题。如果我将事件监听器直接附加到声音var我得到一个“'undefined'不是函数”错误。

var SceneSound = new buzz.sound(".../something.m4a");
SceneSound.play();
SceneSound.addEventListener('ended', checkEnding, false);
function checkEnding() {

    console.log("TEST");
    controller.goToNextScene();
}

如果我首先查询声音对象,我会得到一个NULL错误

var SceneSound = new buzz.sound(".../something.m4a");
SceneSound.play();
var objAudio = document.querySelector("#SceneSound audio");
SceneSound.addEventListener('ended', checkEnding, false);

function checkEnding() {

    console.log("TEST");
    controller.goToNextScene();
}

声音播放和所有,它只是附加eventListener导致错误。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

你忘了提到你的浏览器了。播放音频与浏览器相关。 另外,请勿使用第三方库 - 直接使用Audio TAG。

这是一个例子:

function strNS(i){
switch (i){
    case 0 : return "EMPTY";
    case 1 : return "IDLE";
    case 2 : return "LOADING";
    case 3 : return "NO SOURCE";
} 
}

function strRS(i){
switch (i){
    case 0 : return "NOTHING";
    case 1 : return "METADATA";
    case 2 : return "CURRENT_DATA";
    case 3 : return "FUTURE_DATA";
    case 4 : return "ENOUGH_DATA";
} 
}

// Event Handler
function eh(e){

//console.log( "NS:" + strNS(e.currentTarget.networkState) + " RS:" +      strRS(e.currentTarget.readyState));

}

function ensureEvent(obj, prop){

if (obj.hasOwnProperty('on' + prop)){
    console.info(a + " does support '" + prop + "'")
    obj.addEventListener(prop, eh);

}else{
    console.log(a + " does not support '" + prop + "'");
}


}


var a = new Audio();

a.autoplay = true;
a.controls = true;

ensureEvent (a, 'loadstart');
ensureEvent (a, 'progress');
ensureEvent (a, 'suspend');
ensureEvent (a, 'load');
ensureEvent (a, 'abort');
ensureEvent (a, 'error');
ensureEvent (a, 'emptied');
ensureEvent (a, 'stalled');
ensureEvent (a, 'play');
ensureEvent (a, 'pause');
ensureEvent (a, 'loadedmetadata');
ensureEvent (a, 'loadeddata');
ensureEvent (a, 'waiting');
ensureEvent (a, 'playing');
ensureEvent (a, 'canplay');
ensureEvent (a, 'canplaythrough');
ensureEvent (a, 'seeking');
ensureEvent (a, 'timeupdate');
ensureEvent (a, 'ended');
ensureEvent (a, 'ratechange');
ensureEvent (a, 'durationchange');

a.src = "blablabla.mp3";
a.play();