EventListener和音频事件导致错误



我遇到了一个恼人的错误,基本上我使用第三方编辑器来运行一个简单的游戏,我在场景开始时开始一个音频文件,在音频结束后我想要goToNextScene(),这是一个内置的功能。我使用的是Buzz JavaScript库。然而,我遇到了这个问题。如果我将事件侦听器直接连接到声音变量,我得到一个'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导致错误。什么好主意吗?

你忘了说你的浏览器。音频的播放与浏览器有很大关系。也不要使用第三方库-直接使用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();

最新更新