Jquery 多个HTML5音频行为:请一次播放一首曲目

Jquery 多个HTML5音频行为:请一次播放一首曲目,jquery,html,audio,Jquery,Html,Audio,首先,我想我会向你展示我目前所拥有的 我的html结构中有多个标记。我使用标准技术播放带有标记的文件 $('.play').on('click',function(e){ e.preventDefault(); var song = $(this).next('audio').get(0); if(song.paused){ song.play(); }else { song.pause(); } }); 接下来,我编写了

首先,我想我会向你展示我目前所拥有的

我的html结构中有多个
标记。我使用标准技术播放带有
标记的文件

$('.play').on('click',function(e){
e.preventDefault();

var song = $(this).next('audio').get(0);

    if(song.paused){
        song.play();

    }else {
        song.pause();    
    }
});
接下来,我编写了一个简单的函数,在当前播放的曲目结束时播放以下曲目

$('audio').on('ended',function(e){
e.preventDefault();
var $next = $(this).nextAll().eq(1).get(0);

        if($next.paused){
            $next.play();
        }
}); 
然后,还有一些用于可视化UI的函数将高亮显示类添加到当前播放的曲目中

$('audio').on('playing',function(){
    $(this).prev().addClass('highlight')
});

$('audio').on('ended',function(){
    $(this).prev().removeClass('highlight')
});

 $('audio').on('pause',function(){ 
    $(this).prev().removeClass('highlight') 
 });
现在我的问题是:如果单击多个曲目,它们将同时播放。我希望当前播放的任何曲目在单击其他曲目时暂停

我在Stack上找到了类似的帖子,关注点也很相似,我发现了这个函数,它可以循环遍历所有
音频
对象并暂停它们

var allAudioEls = $('audio');

function pauseAllAudio() {
   allAudioEls.each(function() {
      var a = $(this).get(0);
      a.pause();
   });
}
如果我像这样调用函数(在下面的第3行)

它几乎可以工作,它会暂停正在播放的另一首曲目,并播放最近单击的曲目,但现在您无法暂停当前正在播放的曲目。我希望这是有道理的。我很确定这是某种流量问题,但我是一个完全的初学者。。。也许我需要 这是一种全新的技术。我认为我在正确的轨道上循环通过
音频
对象。。。任何帮助都将不胜感激,就像我说的,我是个新手。任何详细的解释都将不胜感激


谢谢

向您的
pauseAllAudio
函数添加一个参数,该参数不包括特定元素:

function pauseAllAudio(exclude) {
    allAudioEls.each(function() {
        var a = $(this).get(0);
        if(a !== exclude) {
            a.pause();
        }
    }
}
然后将
song
传递给
pausealaudio

var song = $(this).next('audio').get(0);
pauseAllAudio(song);

如果不需要在此代码块中播放歌曲,只需将
pauseAllAudio()
调用向下移动到复选框下方即可。但是,这样做会使它无法播放的时间超过从
song.play()
pauseAllAudio()

所需的无限小的时间。这正是我想要的!非常感谢!我得承认我不太明白排除参数到底发生了什么。。。如果你能告诉我哪些概念需要研究才能更好地理解,我会觉得用这个会更好。再次表示感谢。谢谢。
exclude
参数是指向特定DOM对象的(想想内存地址或C/C++指针),变量
a
也是如此。if语句检查引用是否相等。如果是,那么它们就是同一个DOM对象,我们将其从暂停中排除。我自学成才,我喜欢堆栈作为资源。如果你觉得应该否决这个问题,请告诉我为什么。我真的很想学习jquery。
var song = $(this).next('audio').get(0);
pauseAllAudio(song);