我遇到了一个烦人的错误,基本上我正在使用第三方编辑器来运行一个简单的游戏,我在场景开始时启动一个音频文件,在音频结束后我想goToNextScene()
这是一个内置函数。我正在使用 Buzz JavaScript 库。但是我遇到了这个问题。如果我将事件监听器直接附加到声音变量,我会收到“'未定义'不是函数”错误。
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
导致了错误。有什么想法吗?
最佳答案
你忘了提及你的浏览器。音频的播放与浏览器非常相关。 也不要使用第 3 方库 - 直接使用音频标签。
这是示例:
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();
关于javascript - EventListener 和音频事件导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8206226/