目录

  • 一、项目数据API接口地址
  • 二、实现播放页面效果
  • 三、实现思路
  • 四、实现思路代码
    • 1、发送ajax请求获取歌词
    • 2、 处理歌词格式
    • 3、判定该显示哪句歌词
    • 4、代码部分
  • 五、整个页面完整代码

一、项目数据API接口地址

API地址:https://neteasecloudmusicapi.js.org/#/
API文档说明地址:https://binaryify.github.io/NeteaseCloudMusicApi/#/

二、实现播放页面效果

三、实现思路

1、在路由跳转时携带ID参数发送ajax请求,根据id我们可以获取到歌曲的歌词

2、对获取到的歌词进行切分并以key:value的形式放入到对象中,将每个时间段获得的歌词存起来方便页面渲染,其中key为时间

3、同步一次显示一行歌词:如果当前播放的时间等于歌词的key值,那么就将当前歌词切换为这一句

四、实现思路代码

1、发送ajax请求获取歌词

// 获取-并调用formatLyric方法, 处理歌词const lyrContent  = await getLyricByIdAPI({id:this.id});const lyricStr = lyrContent.data.lrc.lyric

我们可以得到的歌词的样式

{lyric : "[00:00.000] 作词 : 张军磊[00:01.000] 作曲 : 李亚洲[00:02.000] 编曲 : 李博[00:03.000] 制作人 : 李亚洲[00:29.98]风越过高高的山岗......"}

2、 处理歌词格式

可以看到我们的歌词是带时间的文本,需要对其切分,并以键值对的形式存放到对象中,将每个时间段的歌词以key:value的形式储存起来方便页面渲染

① 匹配所有[]字符串以及里面的一切内容, 返回数组

let reg = /\[.+" />;  background: rgba(0, 0, 0, 0.5);  position: absolute;  left: 0;  top: 0;  right: 0;  bottom:0;}.song-wrapper {  position: fixed;  width: 247px;  height: 247px;  left: 50%;  top: 50px;  transform: translateX(-50%);  z-index: 10001;}.song-turn {  width: 100%;  height: 100%;  background: url("./img/bg.png") no-repeat;  background-size: 100%;}.start-box {  position: absolute;  width: 156px;  height: 156px;  position: absolute;  left: 50%;  top: 50%;  transform: translate(-50%, -50%);  display: flex;  justify-content: center;  align-items: center;}.song-start {  width: 56px;  height: 56px;  background: url("./img/start.png");  background-size: 100%;}.needle {  position: absolute;  transform-origin: left top;  background: url("./img/needle-ab.png") no-repeat;  background-size: contain;  width: 73px;  height: 118px;  top: -40px;  left: 112px;  transition: all 0.6s;}.song-img {  width: 154px;  height: 154px;  position: absolute;  left: 50%;  top: 50%;  overflow: hidden;  border-radius: 50%;  transform: translate(-50%, -50%);}.m-song-h2 {  margin-top: 20px;  text-align: center;  font-size: 18px;  color: #fefefe;  overflow: hidden;  white-space: nowrap;  text-overflow: ellipsis;}.lrcContent {  margin-top: 50px;}.lrc {  font-size: 14px;  color: #fff;  text-align: center;}.left-incon {  position: absolute;  top: 10px;  left: 10px;  font-size: 24px;  z-index: 10001;  color: #fff;}.ani {  animation: turn 5s linear infinite;}@keyframes turn {  0% {    -webkit-transform: rotate(0deg);  }  100% {    -webkit-transform: rotate(360deg);  }}</style>

api/index.js

// axios发送ajax请求网络请求import axios from "axios";// axios.create()创建一个axios对象const request = axios.create({    //基础路径,发请求的时候,路径当中会出现api,不用你手写baseURL:'http://localhost:3000',//请求时间超过5秒timeout:5000});//获取音乐播放地址export const getSongByIdAPI = (params)=>request({url:"/song/url/v1",params});//获取歌词export const getLyricByIdAPI = (params)=>request({url:'/lyric',params});//获取歌曲详情export const getMusicByIdAPI = (params)=>request({url:'/song/detail',params})

以上是实现网易云音乐播放页面并同步一次显示一行歌词代码,喜欢点点赞哦~~~