Javascript addEventListener是否在while循环中工作?
我正在尝试循环多个元素,以更改单个音频元素的音频源,播放它,一旦结束,更改新的src并播放它,直到循环已通过所有元素:Javascript addEventListener是否在while循环中工作?,javascript,audio,while-loop,dom-events,addeventlistener,Javascript,Audio,While Loop,Dom Events,Addeventlistener,我正在尝试循环多个元素,以更改单个音频元素的音频源,播放它,一旦结束,更改新的src并播放它,直到循环已通过所有元素: var contentAudio = new Audio();; function audioLoop(index, audioModel) { while (index < audioModel.length) { var audio = contentAudio; audio.src = audioModel[index].
var contentAudio = new Audio();;
function audioLoop(index, audioModel) {
while (index < audioModel.length) {
var audio = contentAudio;
audio.src = audioModel[index].src;
audio.play()
audio.addEventListener('ended',
function () {
index++;
});
}
console.log('done');
}
var contentAudio=new Audio();;
功能audioLoop(索引、audioModel){
while(索引
添加事件侦听器似乎不起作用。音频无法播放,我陷入了无休止的循环。永远不会触发音频结束事件。我做错什么了吗?有更好的选择吗?while循环是同步的,因此它不会等待您的
结束
事件。以下是我的建议:
var contentAudio = new Audio();
function audioLoop(index, audioModel) {
(function process(done) {
if (index >= audioModel.length) {
done(); return;
}
var audio = contentAudio;
audio.src = audioModel[index].src;
audio.play()
audio.addEventListener('ended', function () {
index++;
process(done);
});
})(function () {
console.log('done');
});
}
也是
audioModel
阵列。如果是这样,我认为您应该使用audioModel[index].src
而不是audioModel.src
while循环是同步的,因此它不会等待事件结束。以下是我的建议:
var contentAudio = new Audio();
function audioLoop(index, audioModel) {
(function process(done) {
if (index >= audioModel.length) {
done(); return;
}
var audio = contentAudio;
audio.src = audioModel[index].src;
audio.play()
audio.addEventListener('ended', function () {
index++;
process(done);
});
})(function () {
console.log('done');
});
}
也是audioModel
阵列。如果是这样的话,我认为您应该使用audioModel[index].src
而不是audioModel.src
是的,它是一个数组,正如您所说,它应该是audioModel[index].src
感谢您指出了这一点。有没有办法取消事件侦听器的注册?您可以使用removeEventListener
是一个数组,是的,正如您所说,它应该是audioModel[index]。src
感谢您指出这一点。有没有办法注销事件侦听器?您可以使用removeEventListener