audiojs使用总结

项目需求:同一页面有多个音乐播放器,同一时间只能播放一个音乐。因页面限制所以需要找一个比较简洁,且方便自定义样式的插件,所以选择了audiojs。并利用圣杯模式实现进度条长度自适应,可以适用不同尺寸设备。

效果图:
这里写图片描述

HTML代码:

<div class="audiojsZ">
  <audio src="../../static/musics/n.mp3" preload="auto"></audio>
  <div class="" style="width: 100%;float: left;">
    <div class="scrubberZ">
      <div class="progressZ"></div>
      <div class="loadedZ"></div>
    </div>
  </div>
  <div class="play-pauseZ">
    <p class="playZ"></p>
    <p class="pauseZ"></p>
    <p class="loadingZ"></p>
    <p class="errorZ"></p>
  </div>
  <div class="timeZ">
    <em class="playedZ">00:00</em>/<strong class="durationZ">00:00</strong>
  </div>
  <div class="error-messageZ"></div>
</div>

JS

setTimeout(function () {
  audiojs.events.ready(function() {
    var aAudioDomList = document.getElementsByTagName('audio')
    for(var i of aAudioDomList) {
      //初始化 自定义样式
      audiojs.create(i, {
        css: false,
        createPlayer: {
          markup: false,
          playPauseClass: 'play-pauseZ',
          scrubberClass: 'scrubberZ',
          progressClass: 'progressZ',
          loaderClass: 'loadedZ',
          timeClass: 'timeZ',
          durationClass: 'durationZ',
          playedClass: 'playedZ',
          errorMessageClass: 'error-messageZ',
          playingClass: 'playingZ',
          loadingClass: 'loadingZ',
          errorClass: 'errorZ'
        }
      })
    }
  })
  //保存正在播放音乐的序号
  var sAudioPlayingIndex = '-1'
  for(var i in audiojs.instances){
    //去看了源码 没有找到点击播放按钮的回调函数 只能重写playPause(监听音乐播放进度事件)
    //
    audiojs.instances[i].playPause = function () {
      // 原playPause事件 
      if (this.playing) this.pause();
      else this.play();
      // 有正在播放的音乐序号与sAudioPlayingIndex所保存的不同 则暂停音乐
      var sId = this.wrapper.id.split('audiojs_wrapper')[1]
      if (this.playing === true && sAudioPlayingIndex !== sId) {
        sAudioPlayingIndex = sId
        for(var j in audiojs.instances){
          if (j.split('audiojs')[1] != sAudioPlayingIndex) {
            audiojs.instances[j].pause()
          }
        }
      }
    }
  }
}, 2000)

CSS

.audiojsZ audio { position: absolute; left: -1px; }
/* 根据父标签className 展示不同长度 */
.question-audio .audiojsZ{
  width: 80%;
}
.option-img-div .audiojsZ{
  width: 100%;
}
.audiojsZ { width: 150px; height: 30px;margin: 5px auto 0 auto; background: #FDCD0F; overflow: hidden; font-family: monospace; font-size: 12px;
  -webkit-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); -moz-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3);
  -o-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.3); }
.audiojsZ .play-pauseZ { width: 25px; height: 25px; padding: 2px 3px; margin-left: -100%; float: left; overflow: hidden; border-right: 1px solid #F15A24; }
.audiojsZ p { display: none; width: 25px; height: 40px; margin: 0px; cursor: pointer; }
.audiojsZ .playZ { display: block; }
.audiojsZ .scrubberZ { height: 14px;margin: 8px 90px 8px 40px; background: #eee; border-left: 0px; border-bottom: 0px; overflow: hidden; }
.audiojsZ .progressZ { top: 0px; left: 0px; height: 14px; width: 0px;float: left;background: #9B3718; z-index: 1; }
.audiojsZ .loadedZ { top: 0px; left: 0px; height: 14px; width: 0px; background: #F15A24; }
.audiojsZ .timeZ { float: left; height: 30px; line-height: 30px; margin-left: -80px; padding: 0 5px; border-left: 1px solid #F15A24; color: #F15A24; }
.audiojsZ .timeZ em { padding: 0px 2px 0px 0px; color: #fff; font-style: normal; }
.audiojsZ .timeZ strong { padding: 0px 0px 0px 2px; font-weight: normal; }
.audiojsZ .error-messageZ { float: left; display: none; margin: 0px 10px; height: 36px; width: 400px; overflow: hidden; line-height: 36px; white-space: nowrap; color: #fff;
  text-overflow: ellipsis; -o-text-overflow: ellipsis; -icab-text-overflow: ellipsis; -khtml-text-overflow: ellipsis; -moz-text-overflow: ellipsis; -webkit-text-overflow: ellipsis; }
.audiojsZ .error-messageZ a { color: #eee; text-decoration: none; padding-bottom: 1px; border-bottom: 1px solid #999; white-space: wrap; }

.audiojsZ .playZ { background: url('../../static/images/player-graphics.gif') -2px -1px no-repeat; }
.audiojsZ .loadingZ { background: url('../../static/images/player-graphics.gif') -2px -31px no-repeat; }
.audiojsZ .errorZ { background: url('../../static/images/player-graphics.gif') -2px -61px no-repeat; }
.audiojsZ .pauseZ { background: url('../../static/images/player-graphics.gif') -2px -91px no-repeat; }

.playingZ .playZ, .playingZ .loadingZ, .playingZ .errorZ { display: none; }
.playingZ .pauseZ { display: block; }

.loadingZ .playZ, .loadingZ .pauseZ, .loadingZ .errorZ { display: none; }
.loadingZ .loadingZ { display: block; }

.errorZ .timeZ, .errorZ .playZ, .errorZ .pauseZ, .errorZ .scrubberZ, .errorZ .loadingZ { display: none; }
.errorZ .errorZ { display: block; }
.errorZ .play-pauseZ p { cursor: auto; }
.errorZ .error-messageZ { display: block; }

audiojs CDN地址
audiojs github地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值