AudioJS:每页一次只播放 html5 音频

Posted

技术标签:

【中文标题】AudioJS:每页一次只播放 html5 音频【英文标题】:AudioJS: play only html5 audio at time per page 【发布时间】:2017-02-10 06:10:33 【问题描述】:

我目前正在使用简单的 AudioJs 脚本,它很容易集成,但如果我在同一页面中有多个音频文件,我希望用户能够点击任何播放并收听而无需停止首先是上一个文件...基本上我需要一个显示“全部停止”的切换按钮然后播放这个

关于如何实现它的任何帮助?

我试过了

    $.each($('audio'), function() 
        this.pause();
    );

但这不会反转按钮和 AudioJs 创建的每个实例的“播放”状态

【问题讨论】:

您是否尝试在document 中的所有音频节点上调用.pause()?您能否将您在 Question 中尝试过的javascript 包含在内? 我每个都尝试过 Jquery,是的,我可以阻止它们,但是它与 AudioJS 指令冲突,因为我无法为 AudioJS 创建的每个实例设置播放=false 没试过AudioJS。库是否使用AudioContext 播放媒体? 不确定...kolber.github.io/audiojs/docs 【参考方案1】:

此类功能的一般技巧是在所有播放器上绑定onplay 事件;当你播放一个时,它现在会触发你暂停所有播放器,除了 onplay 被触发的播放器,但这里的问题是 audiojs 在其包装器对象中不提供音频事件(它只提供播放、暂停等方法)。但是您可以做一些事情:每个播放器对象都会引用其对应的 html5 <audio> 元素(实际上是在播放 mp3),您可以使用它并使用 element 属性直接绑定它。

1.在所有玩家上绑定onplay

allAud = a.createAll();
for(var i=0; i<allAud.length;i++)
 
    allAud[i].element.onplay = function pauseOthers();

2.当 onplay 触发循环遍历所有播放器的 &lt;audio&gt; 并暂停除触发事件的那个之外的所有播放器(使用 audiojs 包装器 pause() 方法

function pauseOthers()  
    for(var j=0; j<allAud.length;j++)
    
        if(allAud[j].element != this)  //pause all except the one being played
        allAud[j].pause(); // can also use `this.pause()` , but better let audiojs do that incase it's handling some play/pause animation
    

演示:http://jsfiddle.net/rqsxxjmd/

【讨论】:

以上是关于AudioJS:每页一次只播放 html5 音频的主要内容,如果未能解决你的问题,请参考以下文章

一次只允许播放一个音频元素

在 HTML5 中使用音频标签时如何避免主播重新播放音乐?

HTML5 音频未在 Android 4.0.4 设备本机浏览器中多次播放

提供禁用音频自动播放的选项

无法调节音量

当通过 JavaScript 填充源时,Html5 音频不会在 Safari 中播放