基于vue+百度音乐api +express + mongodb + elementUi定义自己的音乐播放器(六)

接下来介绍收藏页面,先定义一个收藏组件myCollect.vue,然后在music.vue里面引入

 <!-- 我的收藏  -->
            <div class="mid-col mycollectList" v-if="myChoose === '我的收藏'" style="background: #4A424A;">
                <my-collect></my-collect>
            </div>

引入这个组件:

import myCollect from './myCollect'
components: {
           myCollect
        },

查询数据库中收藏的数据,上一节中的routes/music.js有定义查询的方法,这里直接调用,还是要先引入import axios from "axios"

1.还是先定义data里面的数据

data(){
            return{
                musicList: [],// 保存获取收藏列表数据
                max: 0,//歌曲时长
                now: 0,//歌曲播放到哪里的时间点
                autoplays: false,//是否自动播放
                lrc: '',//保存歌词
                value: 0,//进度条初始值
                maxTime: '00:00',//歌曲时长转后后的格式
                nowTime: '00:00',//歌曲播放到哪里转后后的格式
                api: 'http://tingapi.ting.baidu.com/v1/restserver/ting',
                ifPlay: '',
                ifPlay1: '',
                dataObj: {
                    format: 'json',
                    calback: '',
                    from: 'webapp_music'
               },
               musicUrl: '',
               playParams: {
                    method: 'baidu.ting.song.play',
                    songid: ''
               },
              //获取歌词参数
               lrcParams: {
                    method: 'baidu.ting.song.lry',
                    songid: ''
               }
            }
        },
getMusic() {
             let datas = {}
             axios.post( '/music/list',datas ).then(res=>{
                this.musicList = res.data.msg;//查询保存收藏的数据
             })
 },

页面如下

//展示歌曲
<div class="list-item" data-no="1" v-for="(item,index) in musicList" :key="index" @dblclick="playMusic(index,item)">    
                            <span class="list-num" v-if="ifPlay !== index">{{index + 1}}</span>    
                            <span class="list-num" v-if="ifPlay === index"><img src="/static/img/wave.gif" alt=""></span>    
                            <span class="list-mobile-menu"></span>   
                            <span class="music-album">{{item.hot}}</span>    
                            <span class="auth-name">{{item.author}}</span>    
                            <span class="music-name">
                                <span class="music-name-cult">{{item.title}}</span>
                                <!-- <div class="list-menu" data-no="1">
                                    <span class="list-icon icon-play" data-function="play" title="点击播放这首歌"></span>
                                    <span class="list-icon icon-download" data-function="download" title="点击下载这首歌"></span>
                                    <span class="list-icon icon-share" data-function="share" title="点击分享这首歌"></span>
                                </div> -->
                            </span>
                        </div>
//进度条,播放暂停等自定义
<div class="footerMusic">
              <div class="containerList">
                  <div class="con-btn">
                    <a href="javascript:;" class="player-btn btn-prev" title="上一首" @click="prev"></a>
                    <a href="javascript:;" @click="ifStop" class="player-btn btn-play" :class="autoplays ? ' btn-state-paused': ''" title="暂停/继续"></a>
                    <!-- <a href="javascript:;" class="player-btn btn-next" title="下一首"></a> -->
                    <a href="javascript:;" class="player-btn btn-next" title="下一首" @click="next"></a>
                    <a href="javascript:;" class="btn-order">{{nowTime}} / {{maxTime}}</a>
                    <!-- <el-progress :percentage="70"></el-progress> -->
                    <vue-slider @drag-end="dragend" ref="slider" v-model="value" width="800px" :max="600"></vue-slider>
                    <!-- <div>
                        {{lrc}}
                    </div> -->
                  </div>
              </div>
         </div>

页面效果如下:


15.png

双击播放,audio相关的api参考https://www.douban.com/note/158621500/

一、播放
例:method=baidu.ting.song.play&songid=877578
例:method=baidu.ting.song.playAAC&songid=877578
参数:songid = 877578 //歌曲id
二、LRC歌词
例:method=baidu.ting.song.lry&songid=877578
参数:songid = 877578 //歌曲id

 <div class="audioUrl" style="opacity: 0;">
                <audio 
                   @timeupdate="onTimeupdate" //播放过程的回调
                   @loadedmetadata="onLoadedmetadata" //开始播放的回调
                   @ended="endedPlay"//播放完的回调
                   :src="musicUrl" 
                   controls="controls" 
                   ref="audio" //通过ref获取dom元素
                   :autoplay="autoplays">
                </audio>
         </div>
          //播放音乐
           playMusic(index,item) {
               this.ifPlay = index;
               this.ifPlay1 = index;
                this.playParams.songid = item.song_id;
                this.lrcParams.songid = item.song_id;
                this.getMusicUrl();
           },
           // 通过jsonp获取音乐链接,这是个公共的方法,很多地方用到
           getMusicUrl() {
               const dataMusic = Object.assign({}, this.playParams, this.dataObj)
                const dataMusic1 = Object.assign({}, this.lrcParams, this.dataObj)
                this.$jsonp(this.api, dataMusic).then(json => {
                    this.autoplays = true;
                    this.musicUrl = json.bitrate.file_link;   //获取歌曲链接,上一节也有介绍
                })
                this.$jsonp(this.api, dataMusic1).then(json => {
                    this.lrc = parseLyric(json.lrcContent);//获取歌词
                    console.log(parseLyric(json.lrcContent), 'parseLyricparseLyricparseLyricparseLyric');          
                })
           },

定义一个时间转化函数,因为获取到播放的时间是以秒计算的

 // 将整数转换成 时:分:秒的格式
    function realFormatSecond(second) {
        var secondType = typeof second

        if (secondType === 'number' || secondType === 'string') {
            second = parseInt(second)

            var hours = Math.floor(second / 3600)
            second = second - hours * 3600
            var mimute = Math.floor(second / 60)
            second = second - mimute * 60

            return ('0' + mimute).slice(-2) + ':' + ('0' + second).slice(-2)
        } else {
            return '00:00'
        }
    }
        //开始播放事件,audio自带的事件,
         onLoadedmetadata(res) {
              //转换时间格式并赋值在页面展示,这里是歌曲时长
              this.maxTime = realFormatSecond(res.target.duration);
             //将字符串转换成数字类型,方便以后控制进度条
              this.max = parseInt(res.target.duration);
           },

上一首和下一首,播放和暂停

// 下一首
            next() {
                //这里的ifPlay1是双击时赋值的index,也就是是数组的下标
                //点击下一首时下标加一
                let index = parseInt(this.ifPlay1) + 1;
                if(index > this.musicList.length) {
                  index = 0;
                }
                this.playParams.songid = this.musicList[index].song_id;
                this.lrcParams.songid = this.musicList[index].song_id;
                this.ifPlay = index;
                this.ifPlay1 = index.toString();
                //获取下一首的id后继续请求
                this.getMusicUrl();
            },
            // 上一首,和下一首原理一样
            prev() {
                let index = parseInt(this.ifPlay1) - 1;
                if(index < 0) {
                 index = this.musicList.length;
                }
                this.playParams.songid = this.musicList[index].song_id;
                this.lrcParams.songid = this.musicList[index].song_id;
                this.ifPlay = index;
                this.ifPlay1 = index.toString();
                this.getMusicUrl();
            },
            //audio提供的原生事件,当前播放结束后进入下一首,原理和播放下一首一 
             样
           endedPlay(){
              this.autoplays = !this.autoplays;
              this.ifPlay = '';
              let index = parseInt(this.ifPlay1) + 1;
              if(index > this.musicList.length) {
                 index = 0;
              }
              this.playParams.songid = this.musicList[index].song_id;
              this.lrcParams.songid = this.musicList[index].song_id;
              this.ifPlay = index;
              this.ifPlay1 = index.toString();
              this.getMusicUrl();
           },
           // 停止与播放
           ifStop(){
              if(this.autoplays) {
                 this.$refs.audio.pause();//停止播放
                 this.ifPlay = '';
              }else {
                 this.$refs.audio.play();//开始播放
                 this.ifPlay = this.ifPlay1;
              }
              this.autoplays = !this.autoplays;
           },

进度条的展示和歌词的滚动播放

1.安装进度条插件 cnpm i vue-slider-component --save并引入

import vueSlider from 'vue-slider-component'
        components: {
            vueSlider
        },

2.页面使用

//这里的dragend为拖动停止事件,这里暂时不支持点击进度条快进,可以支持拖动进度条快进,value为绑定的当前值,最大值我这里设置为600
 <vue-slider @drag-end="dragend" ref="slider" v-model="value" width="800px" :max="600"></vue-slider>

歌词的数据格式如下,需要转换格式在页面展示


23.png
 //歌词同步部分    
    function parseLyric(text) {      
        var lines = text.split('\n');
        lines.splice(0,5);
        //用于匹配时间的正则表达式,匹配的结果类似[xx:xx.xx]    
        var pattern = /\[\d{2}:\d{2}.\d{2}\]/g,    
        //保存最终结果的数组    
        result = [];    
        //去掉不含时间的行    
        // while (!pattern.test(lines[0])) {    
        // lineslines = lines.slice(1);    
        // };    
        //上面用'\n'生成生成数组时,结果中最后一个为空元素,这里将去掉    
        // lines[lines.length - 1].length === 0 && lines.pop();    
        lines.forEach(function(v, i, a ) {    
           //提取出时间[xx:xx.xx]    
           var time = v.match(pattern);
           //提取歌词    
           var vvalue = v.replace(pattern, '');    
           //因为一行里面可能有多个时间,所以time有可能是[xx:xx.xx][xx:xx.xx][xx:xx.xx]的形式,需要进一步分隔    
           time.forEach(function(v1, i1, a1) {    
            //去掉时间里的中括号得到xx:xx.xx    
            var t = v1.slice(1, -1).split(':');    
            //将结果压入最终数组    
            result.push([parseInt(t[0], 10) * 60 + parseFloat(t[1]), vvalue]);    
            });    
         });    
        //最后将结果数组中的元素按时间大小排序,以便保存之后正常显示歌词    
        // result.sort(function(a, b) {    
        // return a[0] - b[0];    
        // });    
        return result;    
    }  
 onTimeupdate(res) {
            //onTimeupdate为原生事件可以获取播放的当前时间点
            //获取当前时间点并赋值
              this.nowTime = realFormatSecond(res.target.currentTime);
              this.now = parseInt(res.target.currentTime);
              if(this.now > 0) {
                 //给进度条赋值
                 this.value = (this.now)*600/(this.max);
                //  console.log(this.value, 'this.value');
              }
              for (var i = 0, l = this.lrc.length; i < l; i++) {    
                    if (this.now /*当前播放的时间*/ > this.lrc[i][0]) {    
                    //显示到页面    
                    //这里引入了jquery,需要引入jQuery
                        if(this.lrc[i][1].length > 1) {
                              $('#lyric').css('top',-i*25 + 200+'px'); //让歌词向上移动    
                              $('#lyric li').css('color','#fff');    
                              $('#lyric li:nth-child('+(i+1)+')').css('color','#31c27c'); //高亮显示当前播放的哪一句歌词
                        }
                            
                    }    
              } 
           },

拖动播放

dragend(e) {
              console.log(e,'eeeeeeeeeeeeeeee');
               //原生属性,跳到指定时间点
              this.$refs.audio.currentTime = e.currentValue*(this.max)/600;
       },

到这里整个音乐播放器就完成了,还有很多功能有时间继续往里面 添加,以下时myCollect页面的代码

<template>
     <div>
         <div class="header">
            <div class="logo" title="♫ 老D在线音乐播放器">
                ♫ 程卫拓在线音乐播放器
            </div>
         </div>
         <div class="center">
              <div class="containerList">
                    <div class="music-list">
                        <div class="list-item list-head">    
                            <span class="music-album">热度</span>
                            <span class="auth-name">歌手</span>    
                            <span class="music-name">歌曲</span>
                        </div>
                        <div class="list-item" data-no="1" v-for="(item,index) in musicList" :key="index" @dblclick="playMusic(index,item)">    
                            <span class="list-num" v-if="ifPlay !== index">{{index + 1}}</span>    
                            <span class="list-num" v-if="ifPlay === index"><img src="/static/img/wave.gif" alt=""></span>    
                            <span class="list-mobile-menu"></span>   
                            <span class="music-album">{{item.hot}}</span>    
                            <span class="auth-name">{{item.author}}</span>    
                            <span class="music-name">
                                <span class="music-name-cult">{{item.title}}</span>
                                <!-- <div class="list-menu" data-no="1">
                                    <span class="list-icon icon-play" data-function="play" title="点击播放这首歌"></span>
                                    <span class="list-icon icon-download" data-function="download" title="点击下载这首歌"></span>
                                    <span class="list-icon icon-share" data-function="share" title="点击分享这首歌"></span>
                                </div> -->
                            </span>
                        </div>
                    </div>
                   <div class="player">
                        <!-- <div class="cover">
                            <img src="https://p1.music.126.net/-qHPT3rhxDlu5zQV9NcQ-A==/109951163555860423.jpg?param=300y300" class="music-cover" id="music-cover">
                        </div> -->
                        <div class="lyric">
                            <ul id="lyric">
                                <li class="lrc-item" v-for="(item,index) in lrc" :key="index">{{item[1]}}</li>
                            </ul>
                        </div>
                    </div>
              </div>
         </div>
         <div class="footerMusic">
              <div class="containerList">
                  <div class="con-btn">
                    <a href="javascript:;" class="player-btn btn-prev" title="上一首" @click="prev"></a>
                    <a href="javascript:;" @click="ifStop" class="player-btn btn-play" :class="autoplays ? ' btn-state-paused': ''" title="暂停/继续"></a>
                    <!-- <a href="javascript:;" class="player-btn btn-next" title="下一首"></a> -->
                    <a href="javascript:;" class="player-btn btn-next" title="下一首" @click="next"></a>
                    <a href="javascript:;" class="btn-order">{{nowTime}} / {{maxTime}}</a>
                    <!-- <el-progress :percentage="70"></el-progress> -->
                    <vue-slider @drag-end="dragend" ref="slider" v-model="value" width="800px" :max="600"></vue-slider>
                    <!-- <div>
                        {{lrc}}
                    </div> -->
                  </div>
              </div>
         </div>
         <!-- <div class="progess">
                   <span class="progess">
                        <vue-slider v-bind="options" ref="slider" v-model="value" width="600px" :max="600"></vue-slider>
                    </span>
         </div> -->
         <div class="audioUrl" style="opacity: 0;">
                <audio 
                   @timeupdate="onTimeupdate" 
                   @loadedmetadata="onLoadedmetadata" 
                   @ended="endedPlay"
                   :src="musicUrl" 
                   controls="controls" 
                   ref="audio" 
                   :autoplay="autoplays">
                </audio>
         </div>
    </div>   
</template>  
<style>
  .footerMusic .vue-slider-component .vue-slider-tooltip{
       display: none;
       
   }
</style>

<style scoped>
#lyric>li {
    word-break: keep-all;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.lyric li {
    list-style: none;
}
.lyric {
    position: absolute;
    left: 10px;
    right: 10px;
    top: 30px;
    bottom: 10px;
    overflow: hidden;
    text-align: center;
    color: #bdbdbe;
    color: rgba(225,225,225,.8);
    line-height: 28px;
    padding: 20px 0;
}
#lyric {
    position: absolute;
    width: 100%;
    top: 0;
    bottom: 0;
    overflow: hidden;
}
.lyric .active{
    color: #31c27c;
}
.cover:after {
    content: "";
    position: absolute;
    left: 9px;
    top: 0;
    width: 201px;
    height: 180px;
    background: url(https://music.laod.cn/images/album_cover_player.png) 0 0 no-repeat;
    pointer-events: none;
}
.music-cover {
    vertical-align: middle;
    width: 186px;
    height: 186px;
}
.player {
    height: 100%;
    width: 400px;
    float: right;
    position: relative;
}
.cover {
    position: relative;
    display: block;
    width: 186px;
    height: 186px;
    margin: auto;
}
::-webkit-scrollbar{width:1px;}
.con-btn a {
    display: inline-block;
    position: absolute;
    top: 50%;
}
.btn-prev {
    background-position: 0 -30px;
    width: 19px;
    height: 20px;
    margin-top: -10px;
}
.btn-order {
    right: -55px;
    width: 85px;
    height: 25px;
    margin-top: -5px;
    font-size: 12px;
    color: white;
    text-decoration: none;
}
.progess{
    right: -100px;
}
.btn-play {
    width: 19px;
    height: 29px;
    margin-top: -14.5px;
    left: 36%;
    margin-left: -10.5px;
}
.btn-state-paused {
    background-position: -30px 0;
}
.btn-next {
    background-position: 0 -52px;
    right: 30%;
    width: 19px;
    height: 20px;
    margin-top: -10px;
}
.player-btn {
    background-image: url(https://music.laod.cn/images/player.png);
    opacity: .8;
    filter: alpha(opacity=80);
}
.con-btn {
    float: left;
    width: 130px;
    height: 100%;
    position: relative;
    margin: 0 10px;
}
.footerMusic{
    height: 100px;
    bottom: 0;
    width: 100%;
    position: absolute;
}
.music-list {
    width: 800px;
    position: absolute;
    left: 10px;
    right: 10px;
    top: 10px;
    bottom: 10px;
    overflow-y: auto;
}
.list-menu {
    position: absolute;
    right: 10px;
    top: 50%;
    overflow: hidden;
    font-size: 0;
    height: 36px;
    margin-top: -18px;
    float: right;
    display: none;
}
.list-item:hover{
    cursor: pointer;
}
.music-name-cult {
    display: block;
    word-break: keep-all;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.list-mobile-menu {
    display: none;
}
.list-num {
    display: block;
    width: 30px;
    text-align: center;
    float: left;
    overflow: hidden;
}
.music-name {
    position: relative;
    display: block;
    width: auto;
    margin-left: 40px;
    margin-right: 300px;
    height: 100%;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    -o-user-select: none;
    user-select: none;
}
.auth-name, .music-album {
    position: relative;
    display: block;
    width: 150px;
    float: right;
    height: 100%;
    word-break: keep-all;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.list-item {
    width: 100%;
    height: 50px;
    line-height: 50px;
    color: #bdbdbe;
    color: rgba(225,225,225,.8);
    font-size: 14px;
    overflow: hidden;
    border-bottom: 1px solid rgba(150,150,150,.1);
    cursor: default;
    position: relative;
}
.data-area {
    position: absolute;
    left: 0;
    right: 400px;
    top: 60px;
    bottom: 0;
    overflow: hidden;
}
.containerList {
    position: relative;
    width: 100%;
    height: 100%;
    max-width: 1200px;
    margin: 0 auto;
}

.center {
    position: absolute;
    width: 100%;
    top: 50px;
    bottom: 100px;
}
.header {
    height: 50px;
    position: absolute;
}
.logo {
    transition: all 0.25s ease;
    -webkit-transition: all 0.25s ease;
    -moz-transition: all 0.25s ease;
    -o-transition: all 0.25s ease;
    -ms-transition: all 0.25s ease;
    display: inline-block;
    font-size: 23px;
    color: #829194;
    cursor: pointer;
    margin: 10px 20px;
}
</style>
<script>
    // 将整数转换成 时:分:秒的格式
    function realFormatSecond(second) {
        var secondType = typeof second

        if (secondType === 'number' || secondType === 'string') {
            second = parseInt(second)

            var hours = Math.floor(second / 3600)
            second = second - hours * 3600
            var mimute = Math.floor(second / 60)
            second = second - mimute * 60

            return ('0' + mimute).slice(-2) + ':' + ('0' + second).slice(-2)
        } else {
            return '00:00'
        }
    }
    //歌词同步部分    
    function parseLyric(text) {      
        var lines = text.split('\n');
        lines.splice(0,5);
        //用于匹配时间的正则表达式,匹配的结果类似[xx:xx.xx]    
        var pattern = /\[\d{2}:\d{2}.\d{2}\]/g,    
        //保存最终结果的数组    
        result = [];    
        //去掉不含时间的行    
        // while (!pattern.test(lines[0])) {    
        // lineslines = lines.slice(1);    
        // };    
        //上面用'\n'生成生成数组时,结果中最后一个为空元素,这里将去掉    
        // lines[lines.length - 1].length === 0 && lines.pop();    
        lines.forEach(function(v, i, a ) {    
           //提取出时间[xx:xx.xx]    
           var time = v.match(pattern);
           //提取歌词    
           var vvalue = v.replace(pattern, '');    
           //因为一行里面可能有多个时间,所以time有可能是[xx:xx.xx][xx:xx.xx][xx:xx.xx]的形式,需要进一步分隔    
           time.forEach(function(v1, i1, a1) {    
            //去掉时间里的中括号得到xx:xx.xx    
            var t = v1.slice(1, -1).split(':');    
            //将结果压入最终数组    
            result.push([parseInt(t[0], 10) * 60 + parseFloat(t[1]), vvalue]);    
            });    
         });    
        //最后将结果数组中的元素按时间大小排序,以便保存之后正常显示歌词    
        // result.sort(function(a, b) {    
        // return a[0] - b[0];    
        // });    
        return result;    
    }  
    import vueSlider from 'vue-slider-component'
    export default{
        components: {
            vueSlider
        },
        data(){
            return{
                musicList: [],
                max: 0,
                now: 0,
                autoplays: false,
                lrc: '',
                value: 0,
                maxTime: '00:00',
                nowTime: '00:00',
                api: 'http://tingapi.ting.baidu.com/v1/restserver/ting',
                ifPlay: '',
                ifPlay1: '',
                dataObj: {
                    format: 'json',
                    calback: '',
                    from: 'webapp_music'
               },
               musicUrl: '',
               playParams: {
                    method: 'baidu.ting.song.play',
                    songid: ''
               },
               lrcParams: {
                    method: 'baidu.ting.song.lry',
                    songid: ''
               }
            }
        },
        mounted(){
          this.getMusic();
          console.log(this.$refs.audio,'this.$refs.audio');
        },
        computed: {

        },
        methods: {
            // 下一首
            next() {
                let index = parseInt(this.ifPlay1) + 1;
                if(index > this.musicList.length) {
                  index = 0;
                }
                this.playParams.songid = this.musicList[index].song_id;
                this.lrcParams.songid = this.musicList[index].song_id;
                this.ifPlay = index;
                this.ifPlay1 = index.toString();
                this.getMusicUrl();
            },
            // 上一首
            prev() {
                let index = parseInt(this.ifPlay1) - 1;
                if(index < 0) {
                 index = this.musicList.length;
                }
                this.playParams.songid = this.musicList[index].song_id;
                this.lrcParams.songid = this.musicList[index].song_id;
                this.ifPlay = index;
                this.ifPlay1 = index.toString();
                this.getMusicUrl();
            },
            dragend(e) {
              console.log(e,'eeeeeeeeeeeeeeee');
              this.$refs.audio.currentTime = e.currentValue*(this.max)/600;
            },
           // 停止与播放
           ifStop(){
              if(this.autoplays) {
                 this.$refs.audio.pause();
                 this.ifPlay = '';
              }else {
                 this.$refs.audio.play();
                 this.ifPlay = this.ifPlay1;
              }
              this.autoplays = !this.autoplays;
           },
           endedPlay(){
              this.autoplays = !this.autoplays;
              this.ifPlay = '';
              let index = parseInt(this.ifPlay1) + 1;
              if(index > this.musicList.length) {
                 index = 0;
              }
              this.playParams.songid = this.musicList[index].song_id;
              this.lrcParams.songid = this.musicList[index].song_id;
              this.ifPlay = index;
              this.ifPlay1 = index.toString();
              this.getMusicUrl();
            //   const dataMusic = Object.assign({}, this.playParams, this.dataObj)
            //   this.$jsonp(this.api, dataMusic).then(json => {
            //         this.autoplays = true;
            //         this.musicUrl = json.bitrate.file_link;        
            //     })
           },
          //播放音乐
           playMusic(index,item) {
               this.ifPlay = index;
               this.ifPlay1 = index;
                this.playParams.songid = item.song_id;
                this.lrcParams.songid = item.song_id;
                this.getMusicUrl();
           },
           onTimeupdate(res) {
              this.nowTime = realFormatSecond(res.target.currentTime);
              this.now = parseInt(res.target.currentTime);
              if(this.now > 0) {
                 this.value = (this.now)*600/(this.max);
                //  console.log(this.value, 'this.value');
              }
              for (var i = 0, l = this.lrc.length; i < l; i++) {    
                    if (this.now /*当前播放的时间*/ > this.lrc[i][0]) {    
                    //显示到页面    
                        if(this.lrc[i][1].length > 1) {
                              $('#lyric').css('top',-i*25 + 200+'px'); //让歌词向上移动    
                              $('#lyric li').css('color','#fff');    
                              $('#lyric li:nth-child('+(i+1)+')').css('color','#31c27c'); //高亮显示当前播放的哪一句歌词
                        }
                            
                    }    
              } 
           },
           // 通过jsonp获取音乐链接
           getMusicUrl() {
               const dataMusic = Object.assign({}, this.playParams, this.dataObj)
                const dataMusic1 = Object.assign({}, this.lrcParams, this.dataObj)
                this.$jsonp(this.api, dataMusic).then(json => {
                    this.autoplays = true;
                    this.musicUrl = json.bitrate.file_link;           
                })
                this.$jsonp(this.api, dataMusic1).then(json => {
                    this.lrc = parseLyric(json.lrcContent);
                    console.log(parseLyric(json.lrcContent), 'parseLyricparseLyricparseLyricparseLyric');          
                })
           },
           onLoadedmetadata(res) {
              this.maxTime = realFormatSecond(res.target.duration);
              this.max = parseInt(res.target.duration);
           },
           getMusic() {
               let getMusics = {
                    type: 'post',
                    path: '/music/list',
                    datas: {
                    }
               }
                this.$store.dispatch(getMusics).then(res=>{
                     this.musicList = res.data.msg;
                    // this.$store.commit('getUseImage',  res.data.msg.image);     
                });
            },
        }

    }
</script>

以上

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容