需求:用jquery写一个音乐播放列表时,可以暂停/播放选中的单个声音,且一则声音正在播放时,点击另一则声音切换播放,并暂停上一则播放。
这里是一个动态加载的ul循环列表html
{{#notEmpty}}
<li class="detail-li clearfix" data-track-id="{{trackId}}">
<audio src="{{trackUrl}}" class="list-trackUrl"></audio>
<a href="" class="left list-play"><img class="play-img" src="../../image/my/list_bofang.png" alt=""></a>
</li>
{{/notEmpty}}
这是我的js代码,已实现第一个需求,即暂停/播放选中的单个声音
$(document).on('click', '.list-play', function(e){
e.preventDefault();
var $audio=$(this).parents('.detail-li').find('.list-trackUrl')[0];
if ($audio.paused) {
$audio.play();
} else {
$audio.pause();
}
});
也实现了第二个需求,一则声音正在播放时,点击另一则声音切换播放,并暂停上一则播放。
$(document).on('click', '.list-play', function(e){
e.preventDefault();
var $audio=$(this).parents('.detail-li').find('.list-trackUrl')[0];
$('audio').not(this).each(function(){
this.pause();
});
if ($audio.paused) {
$audio.play();
} else {
$audio.pause();
}
});
可是,两个需求加在一块,没法同时达到我想要的效果:可以暂停/播放选中的单个声音,且一则声音正在播放时,点击另一则声音切换播放,并暂停上一则播放。请求要怎么写才能实现一个真正的音乐播放列表呢?
修改过后的代码:简单粗暴版
稍微优化版
其他小伙伴推荐的修改src方式,我觉得挺好的。不过有一个优点,或也能算是缺点,就是没有预加载,这个可能需要看具体的使用情况而定。