鸡鸡静听2.0 项目设计
项目简介
使用工具:
typeScript+vue3+setup语法糖+vite
大概:
主要实现的功能:
- 音乐查找及播放
- 轮播图
- 新歌速递
- 推荐专辑
- L显示热评
项目板块划分
头部 header 中间(核心)=左边+右边 底部footer
发现音乐 FoundMusic轮播图 LunBoTu
新歌速递 NewSongs
推荐歌单 RecommendPlaylist
搜索详情 Search音乐详情页 MusicDetail
开始实操
1.1项目初始化
axios文件夹http、pinia文件夹store、vue-router文件夹router、主要页面文件夹vies、element-plus、less
1.2项目布局
- app中放置组件==
== 存放播放器 之中存放== ==== ==== - Main>之中存放==
==== ==
2.1 使用VERCEL部署网易云音乐api
- 在vercel新建项目
- 选择网易云api
- 名字自取,其他可以不改变,点击deploy
6.完成
3.1 搜索板块
- 先调用网易云 api
- 检查输入框是否有内容,添加回车事件获取关键词
keyword - 为列表添加点击事件,跳转到音乐详情页,并传入id参数
1 | const keyword = ref(' '); |
3.2 音乐详情页
更新歌曲详情
- 接收传入的id参数
- 根据id调用api获取音乐详情
- 更新时间、歌词、歌手信息等
歌词
- 使用网易云api获取的歌词是入图的形式,需要手动将时间和歌词分离
调用api获取歌词,并将时间与歌词文字拆离
1
2
3
4
5
6
7
8
9
10
11
12
13
14const getgeci = () => {
GetLyric(id).then((res) => {
music.lyric = res.data.lrc.lyric
let obj = {}
let reg = /\[(.*?)](.*)/g;
//使用正则表达式拆分
music.lyric.replace(reg, (a, b, c) => {
b = b.slice(0, 5)//时间取前4位便于计算
obj[b] = c;
})
// a是原数据,b是时间,c是歌词
geci2.value = obj;
console.log("geci2", geci2.value);
})1
2
3
4
5<div class="geci">
<p class="lyric" v-for="(item, key, i) in geci2" :key="i">
{{ item }}
</p>
</div>其中 ,
item是歌词key是时间实现歌词高亮
ontimeupdate 事件在视频/音频(audio/video)当前的播放位置发送改变时触发
1 | const audio = document.querySelector('audio') as HTMLAudioElement; |
==audio.currentTime==使用audio的currentTime属性获得当前的播放时间
用获取的时间与歌词列表里的时间匹配,并将匹配成攻的值赋给righttime
1 | <div class="geci"> |
根据righttime 和 key值 的匹配结果 动态添加高亮样式。
歌词随播放时间滚动
1
2
3
4
5
6
7
8
9
10
11
12// 歌词移动
const lyricMove = () => {
let highlight = document.getElementsByClassName('highlight')[0] as HTMLDivElement;
const geci = document.querySelector(".geci") as HTMLDivElement;
const gecihezi = document.querySelector(".gecihezi") as HTMLDivElement;
if (highlight) {
if (highlight.offsetTop >= 30) {
// 单句歌词距离顶部的距离 > 30时,开始滚动
gecihezi.scrollTop = highlight.offsetTop - 130
}
}
}
项目中遇到的问题
- 使用官方推荐的获取url的方法时警告
1 | <audio controls> |
不影响实际项目运行!!
- vue3中的reactive响应式数据,不能直接复制
1 | //方法一:使用ref定义 |
- 不会处理ts产生的这种类型错误提醒(不影响项目运行)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 玉玉菠萝!



















