如何使用jQuery无限循环播放音频文件

Posted

技术标签:

【中文标题】如何使用jQuery无限循环播放音频文件【英文标题】:How to play an audio file in a infinite loop using jQuery 【发布时间】:2015-11-20 18:38:14 【问题描述】:

现在我有一段代码(如下),它允许我在单击按钮时播放音频文件。但是,我希望文件在无限循环中播放,直到单击“停止”按钮。 我怎样才能做到这一点?

var audiotypes=
    "mp3": "audio/mpeg",
    "mp4": "audio/mp4",
    "ogg": "audio/ogg",
    "wav": "audio/wav"


function ss_soundbits(sound)
    var audio_element = document.createElement('audio')
    if (audio_element.canPlayType)
        for (var i=0; i<arguments.length; i++)
            var source_element = document.createElement('source')
            source_element.setAttribute('src', arguments[i])
            if (arguments[i].match(/\.(\w+)$/i))
                source_element.setAttribute('type', audiotypes[RegExp.$1])
            audio_element.appendChild(source_element)
        
        audio_element.load()
        audio_element.playclip=function()
            audio_element.pause()
            audio_element.currentTime=0
            audio_element.play()
        
        return audio_element
    


var audio = ss_soundbits('audio/file.mp3');

var start_audio= function() 
   audio.playclip();
;

【问题讨论】:

有一个布尔属性loop(不是loup)... ;) 【参考方案1】:

捕获音频元素上的ended 事件,然后让它再次播放。

audio_element.addEventListener('ended', function() 
    this.currentTime = 0;
    this.play();
, false);

这对你来说应该足够了。

编辑

正如@A 指出的那样。沃尔夫,我做了一个疏忽,点击停止会触发结束的事件。设置一个全局布尔标志将解决这个问题。

var stopped = false;

audio_element.addEventListener('ended', function() 
    if(!stopped)
        this.currentTime = 0;
        this.play();
    
, false); 

var stop_button = document.getElementByID('stop');

stop.addEventListener('click', function()
    stopped = true
    audio_element.stop();
);

【讨论】:

方法stop() 也不会触发ended 事件吗? @A.Wolff 你是对的,我已经在我的回答中解决了这个问题。【参考方案2】:

抱歉我的评论 - 仅补充:audio_element.play() 可能无法在没有手动点击的移动浏览器上运行

【讨论】:

以上是关于如何使用jQuery无限循环播放音频文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在播放/暂停控制功能中停止无限循环

除了播放按钮外,重复(循环)UIButton

如何让用户选择 AVAudioPlayer 播放音频的循环次数

如何在没有任何中断的情况下循环播放音频文件?

如何在 AVAudioPlayer 中循环播放多个音频文件?

如何在 Java 中循环播放音频文件?