美文网首页
一个页面中有多个audio标签,播放其中一个时暂停其他,只允许一

一个页面中有多个audio标签,播放其中一个时暂停其他,只允许一

作者: 知名大学士 | 来源:发表于2020-03-01 22:33 被阅读0次

当一个页面中包含了多个<audio>标签时,我们想要用户点击其中一个<audio>标签时其他的声音都停止播放,也就是说我们希望当前页面永远都是只有一个声音在播放,不会存在两个或多个声音同时播放。

思路:

当我们点击页面中的任意一个<audio>标签时,我们要获取到其他的所有<audio>标签,然后把它们都暂停播放,然后开始播放当前<audio>标签的音乐。

编码:

首先我们获取到所有的<audio>标签:
var audios = document.getElementsByTagName("audio");

我们通过getElementsByTagName()来获取全部的<audio>标签,其返回元素的顺序是它们在文档中的顺序。
如果把特殊字符串 "*" 传递给 getElementsByTagName() 方法,它将返回文档中所有元素的列表,元素排列的顺序就是它们在文档中的顺序。

然后我们编写函数来暂停掉其他的 <audio> :
function pauseAll() {
    var self = this;
    [].forEach.call(audios, function (i) {
        // 将audios中其他的audio全部暂停
        i !== self && i.pause();
    })
}

在这个函数中,我们通过forEach来循环遍历所获取到的所有的<audio>标签,然后判断是否是当前点击的标签,如果不是,我们通过pause()来将其暂停。

绑定函数

还有非常重要的一步就是给所有的<audio>标签绑定上我们的暂停函数:

[].forEach.call(audios, function (i) {
    i.addEventListener("play", pauseAll.bind(i));
})

我们还是采用forEach来给所有的<audio>标签绑定上我们的暂停函数。

完整代码:

var audios = document.getElementsByTagName("audio");
// 暂停函数
function pauseAll() {
    var self = this;
    [].forEach.call(audios, function (i) {
        // 将audios中其他的audio全部暂停
        i !== self && i.pause();
    })
}
// 给play事件绑定暂停函数
[].forEach.call(audios, function (i) {
    i.addEventListener("play", pauseAll.bind(i));
})

相关文章

网友评论

      本文标题:一个页面中有多个audio标签,播放其中一个时暂停其他,只允许一

      本文链接:https://www.haomeiwen.com/subject/gthrkhtx.html