我无法做到这一点。所以,我正在制作一个讲述当前时间的简单脚本。 audiocontainer 是一个音频元素, mp3play()函数已经被更早地定义。 我们的想法是这样做:
[play hourXX.mp3] - >当它结束时 - > [play minutesXX.mp3] - >删除监听器,因此停止。
没有的removeEventListener()函数,minuteXX.mp3无限循环(“它是12和54分钟...... 54分钟...... 54分钟......”因为它一直触发监听器最后。
使用 removeEventListener()函数,音频根本不会启动。你知道为什么吗?
或许有更简单的方法可以连续播放2个MP3吗?
function telltime() {
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();
audiocontainer.addEventListener('ended', function () {
mp3play('./time/minutes/minute'+m.toString()+'.mp3');
audiocontainer.removeEventListener('ended', function(), false); // stop!
}, true);
mp3play('./time/hours/hour'+h.toString()+'.mp3');
}
答案 0 :(得分:9)
由于您的问题有点“本地化”(由于语法错误而无效),我已经抽象出您的问题,以便我能够提供对其他人有用的答案。
将此信息包含在您的上下文中:
var Mp3Queue = function(container, files) {
var index = 1;
if(!container || !container.tagName || container.tagName !== 'AUDIO')throw 'Invalid container';
if(!files || !files.length)throw 'Invalid files array';
var playNext = function() {
if(index < files.length) {
container.src = files[index];
index += 1;
} else {
container.removeEventListener('ended', playNext, false);
}
};
container.addEventListener('ended', playNext);
container.src = files[0];
};
像这样使用它:
//whatever is your audio element
var container = document.getElementById('container');
//play files in a row
new Mp3Queue(container, [
'http://incompetech.com/music/royalty-free/mp3-royaltyfree/Sweeter%20Vermouth.mp3',
'http://incompetech.com/music/royalty-free/mp3-royaltyfree/Happy%20Boy%20Theme.mp3'
]);
这是工作示例:http://jsfiddle.net/fYjLx/
在您的具体情况下:
function telltime() {
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();
new Mp3Queue(container, [
'./time/hours/hour'+h.toString()+'.mp3',
'./time/minutes/minute'+m.toString()+'.mp3'
]);
}