Jquery 多个HTML5音频行为:请一次播放一首曲目
首先,我想我会向你展示我目前所拥有的 我的html结构中有多个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(); } }); 接下来,我编写了
标记。我使用标准技术播放带有
标记的文件
$('.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);