vue使用vue-aplayer(还用了SiriWave波形动画插件)

官方文档

https://aplayer.netlify.app/docs/guide/

1.下载依赖

npm install vue-aplayer --save

2.引用

import vueAplayer from 'vue-aplayer'

components: {

'vueAplayer':vueAplayer

},

3.实例(此实例的样式因为要根据项目原型来,所以样式做了修改重置)

官方效果图:

我使用时的效果图:

 源码:

<template>
<!--  音乐播放器-->
    <div class="my_aplayer">
<!--动画-->
      <div class="player-canvas" ref="player-canvas"></div>

<!--播放器-->
      <vue-aplayer
        @play="handlePlay"
        v-if="musicList"
        :music='musicList[0]'
        :list='musicList'
        :theme="'#CC1720'"
        :mutex="true"
      />


    </div>
</template>

<script>
  import SiriWave from 'siriwave'
  import vueAplayer from 'vue-aplayer'
    export default {
        name: "aplayer",
      props:{
          speed:0,
        musicList:{
          type:Array,
          default:[
            {
              title: '前前前世',
              artist: 'RADWIMPS',
              src: 'http://music.163.com/song/media/outer/url?id=447925558.mp3',
              pic: '',
              lrc: 'https://cn-east-17-aplayer-35525609.oss.dogecdn.com/yourname.lrc',
            },
            {
              title: '光るなら.m3u8',
              artist: 'Goose house',
              src: 'http://music.163.com/song/media/outer/url?id=447925558.mp3',
              pic: '',
              lrc: 'https://cn-east-17-aplayer-35525609.oss.dogecdn.com/hikarunara.lrc',
            }
            ]


        }
      },
      components:{
          'vueAplayer':vueAplayer
      },
      mounted() {
        this.initSiriWave()
      },
      methods: {
        //  动画
        initSiriWave() {
          let siriWave = new SiriWave({
            container: this.$refs['player-canvas'],
            660,
            height:360,
            cover: true,
            speed: 0.02,
            amplitude: 0.4,
            frequency: 4,
            color: "#d9dadb"
          })
          siriWave.start()
        },

      //  播放事件
        handlePlay(el){
          let targetList = el.target.nextElementSibling.lastElementChild.childNodes;
          for(let i=0;i<targetList.length;i++){
            if(targetList[i].className == 'aplayer-list-light'){
              let dataIndex = document.querySelectorAll(".aplayer-list ol");
              dataIndex[0].style.marginTop = `${80 - i*40}px`
            }
          }
        }

      },

    }
</script>

<style scoped lang="scss">
  .my_aplayer {
    position: relative;
    /*动画*/
    .player-canvas {
      width: 600px;
      /*overflow: hidden;*/
      position: absolute;
      z-index: 10000;
      left: 60px;
      top: -61px;
    }
    @media (-webkit-min-device-pixel-ratio: 2) {
      .player-canvas {
        margin-top: -4px;
      }
    }
    /*  音乐播放器*/
    .aplayer {
      z-index: 1000000;
      background-color: rgba(0,0,0,0) !important;
      box-shadow: 0 2px 2px 0 rgba(0,0,0,.0), 0 1px 5px 0 rgba(0,0,0,0) !important;
    }
    /deep/ .aplayer-bar-wrap .aplayer-bar .aplayer-played {
      height: 1px;
    }
    /deep/ .aplayer.aplayer-withlist {
      @extend .flexEndStart;
    }
    /deep/ .aplayer-body {
      width: 60%;
      padding-top: 40px;
    }
    /deep/ .aplayer-list {
      width: 30%;
      margin-left: 4%;
    }
    /deep/ .aplayer-body {
      flex-direction: row-reverse;
    }
    /deep/ .aplayer-pic {
      background-image: none;
    }
    /deep/ .aplayer-pic .aplayer-pause {
      @extend .flexCenter;
      width: 32px;
      height: 32px;
      border: 1px solid #c8c9ca;
      background-color: $color-bg;
      bottom: 4px;
      right: 4px;
    }
    /deep/ .aplayer-pic .aplayer-play {
      @extend .flexCenter;
      width: 32px;
      height: 32px;
      border: 1px solid #c8c9ca;
      background-color: $color-bg;
      bottom: 4px;
      right: 4px;
    }
    /deep/ .aplayer-pic .aplayer-pause .aplayer-icon-pause {
      width: 20px;
      height: 20px;
      position: relative;
      top: 0;
      left: 0;
    }
    /deep/ .aplayer-pic .aplayer-play .aplayer-icon-play {
      width: 20px;
      height: 20px;
      position: relative;
      top: 0;
      left: 0;
    }
    /deep/ .aplayer-pic .aplayer-pause {
      margin: 0 -15px -15px 0;
    }
    /deep/ .aplayer-pic .aplayer-button .aplayer-fill {
      fill: $color-main;
    }
    /deep/ .aplayer-icon.aplayer-icon-mode {
      display: none;
    }
    /deep/ .aplayer-icon.aplayer-icon-menu {
      display: none !important;
    }
    /deep/ .aplayer-icon.aplayer-icon-volume-down {
      display: none !important;
    }
    /deep/ .aplayer.aplayer-withlist .aplayer-body .aplayer-info {
      border-bottom: none;
    }
    /deep/ .aplayer .aplayer-body .aplayer-info .aplayer-music {
      color: rgba(0,0,0,0) !important;
    }
    /deep/ .aplayer .aplayer-body .aplayer-info .aplayer-music .aplayer-author {
      color: rgba(0,0,0,0) !important;
    }

  /*  重置列表样式*/
    /deep/ .aplayer-list ol li.aplayer-list-light, /deep/ .aplayer-list ol li:hover {
      color: $color-main;
      background-color: $color-bg;
    }
    /deep/ .aplayer-list ol {
      height: auto !important;
      overflow-y: hidden;
      margin-top: 80px;
    }
    /deep/ .aplayer-list ol li, /deep/ .aplayer-list ol li .aplayer-list-author {
      height: 40px;
      line-height: 40px;
      border-top: none;
      color: rgba(0,0,0,.4);
    }
    /deep/ .aplayer-list ol li .aplayer-list-cur {
      width: 0;
    }

  /*  重置列表位置*/
    /deep/ .aplayer-list {
      min-height: 230px;
    }
  }


</style>
原文地址:https://www.cnblogs.com/duanzhenzhen/p/13892221.html