【问题标题】:Playing two files in a row in JavaScript在 JavaScript 中连续播放两个文件
【发布时间】:2013-05-30 19:02:57
【问题描述】:

我无法做到这一点。所以,我正在制作一个简单的脚本来告诉当前时间。 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');

}

【问题讨论】:

  • 该行存在语法错误。这就是为什么。 function() 没有其他任何东西是无效的(实际上没有任何意义)
  • 只是为了记录,这是我的逻辑(也许其他人会从错误中吸取教训):据我所知,如果你想销毁 EventListener,你需要以同样的方式引用它被创建。所以我还需要将函数的名称放在 removeEventListener 中。由于我使用嵌套的无名函数创建了监听器(它没有问题),我想我会用相同的“名称”来引用它 - 函数()。

标签: javascript html5-audio playlist event-listener


【解决方案1】:

由于您的问题有点“本地化”(由于语法错误而无法正常工作),因此我已将您的问题抽象化,以便我提供对其他人也有用的答案。

如何连续播放多个mp3文件

将此包含在您的上下文中:

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'
    ]);
}

【讨论】:

  • 哇,谢谢。谈论一个有用的答案!我将分析其中的每一点以了解其工作原理。
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多