javascript - EventListener 和音频事件导致错误?

标签 javascript html dom-events html5-audio

我遇到了一个烦人的错误,基本上我正在使用第三方编辑器来运行一个简单的游戏,我在场景开始时启动一个音频文件,在音频结束后我想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/

相关文章:

javascript - jQuery live ("click", function() {...}) 不适用于正文

javascript - Uncaught ReferenceError : execute is not defined

javascript - 如何将 Bootstrap 工具提示应用于动态生成的表

html - 为什么<main>没有定义&lt;header&gt;和&lt;footer&gt;的范围?

javascript - event.keyCode 替代

javascript - 为什么 iOS Safari 会两次触发窗口焦点事件?

javascript - 隐藏/显示浏览器选项卡的事件?

javascript - 仅对数组的部分内容进行排序

javascript - 在使用 jQuery 提交表单之前更改输入值

javascript - 无法在API项目中多次搜索