javascript - JS控制音乐播放列表

查看:208
本文介绍了javascript - JS控制音乐播放列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

需求:用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();
      }
    });

可是,两个需求加在一块,没法同时达到我想要的效果:可以暂停/播放选中的单个声音,且一则声音正在播放时,点击另一则声音切换播放,并暂停上一则播放。请求要怎么写才能实现一个真正的音乐播放列表呢?

解决方案

$(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获取到的其实是'.list-play',所以这里not其实并没有起到它应有的效果:将点击目标所对应的audio排除在外
        this.pause();
    });

    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];

    if ($audio.paused) {
        $('audio').each(function () { // 直接把所有全部其他audio全部暂停
            this.pause();
        });
        $audio.play(); // 开始自己的播放
    } else {
        $audio.pause();
    }
});

稍微优化版

$(document).on('click', '.list-play', function (e) {
    e.preventDefault();
    var $audio = $(this).parents('.detail-li').find('.list-trackUrl')[0];

    if ($audio.paused) {
        $('audio.playOn').pause(); // 只暂停拥有播放标记的audio
        $('audio.playOn').removeClass('playOn'); // 去除播放标记
        $audio.play();
        $audio.addClass("playOn"); // 对正在播放的audio添加class为playon的标记
        // 去掉了列表循环但是增加了每次点击两次的增删class操作。
    } else {
        $audio.pause();
    }
});

其他小伙伴推荐的修改src方式,我觉得挺好的。不过有一个优点,或也能算是缺点,就是没有预加载,这个可能需要看具体的使用情况而定。

这篇关于javascript - JS控制音乐播放列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆