小程序音乐播放器开发
一. 项目的搭建
1.1. 创建一个新项目
1.2. 创建项目目录结构
1.3. 搭建tabBar页面
二. 视频页面
2.1. 请求基本数据和展示
- 网络请求进行分层结构
- Promise -> await/async
2.2. 上拉加载更多功能
- 监听滚到到底部
- 加载更多的数据
- offset
- [...this.data.videoList, ...res.data]
- hasMore
2.3. 下拉刷新的功能
- 开启下拉刷新
- 监听下拉刷新
- 重置变量
- offset = 0
- videoList = []
- hasMore = true
- 请求结束后, 结束下拉刷新
三. 视频详情
3.1. 点击Item跳转到详情
- video-item组件的监听点击
- data-
- video-item组件的内部监听
- this.properties.itemData
3.2. 获取播放地址Video
- 获取播放地址
- 使用video组件播放
3.3. 获取详情的其他数据
- MV详情
- MV关联推荐视频
3.4. 滚动的页面展示
- page滚动
- scroll-view滚动
四. 音乐页面
4.1. 搜索框的展示
安装vant
- npm install @vant/weapp
- 构建npm
演练vant的使用
搭建搜索框
- 设置属性
- 监听点击, 跳转搜索页面
重要: 覆盖vant样式
- CSS属性
- CSS变量
4.2. 轮播图的展示
4.2.1. 请求轮播数据和基本展示
4.2.2. 轮播图的基本样式调整
- 页面的内边距
- 轮播图的圆角
4.2.3. 轮播图的动态计算
- 根据加载出来的图片, 计算轮播图的高度
- querySelect
- 对方法调用进行节流操作
4.3. area-header的封装
一. 推荐歌曲
1.1. 音乐页面请求数据和展示数据
1.2. hy-event-store数据共享
1.3. 推荐数据Store的共享数据
二. 歌单展示
2.1. 获取歌单, 展示歌单
2.2. 滚动的样式调整
- width: 100% -> screenWidth -> app.globalData
- scroll-view -> flex -> margin-right
- dib -> display: inline-block
2.3. 封装menu-area组件
2.4. 点击更多展示歌单页面
- Promise.all
三. 巅峰榜
3.1. 在rankingStore请求和保存数据
3.2. 在music页面中获取Store中数据
3.3. 封装组件进行展示数据
四. 歌单详情
4.1. 排行榜数据的共享和展示
4.2. 推荐歌曲的共享和展示
4.3. 歌单详情的id-请求数据-展示数据
4.4. 歌单的header的封装和展示
五. 音乐页面的优化
- 如果没有数据, 那么先不展示对应的区域
- wx:if的判断
一. 播放页布局
1.0. 点击Item跳转
1.1. 背景毛玻璃
- image -> 背景
- view -> blur毛玻璃
1.2. 自定义导航栏(掌握)
1.3. 导航栏标题和页面左右滚动
- Swiper/Swiper-Item 轮播图
- 标题的点击 -> 轮播图的切换
1.4. 歌曲页面的布局
- album
- info
- lyric
- progress
- controls
二. 歌曲进度的控制
2.1. 歌曲播放
- audioContext = wx.createInnerAudioContext()
- src属性
- autoplay
2.2. onTimeUpdate
- 改变当前的时间和sliderValue
2.3. 监听slider的点击
- bindchange
- value
- 计算currentTime
- seek(currentTime)
- setData({currentTime, value})
2.4. 监听slider的滑动
- bindchanging
- value
- currentTime
- isSliderChanging
2.5. seek(time) bug处理
- throttle: 节流控制
- leading: false
- trailing: false
- isWaiting: true
2.6. 播放和暂停功能
三. 歌词的展示
3.1. 请求和解析歌词
- 正则表达式
3.2. time匹配歌词
循环所有的歌词, 找到第一个比当前时间大的一句歌词
- i - 1
index: length - 1
currentLyricText
currentLyricIndex
- 性能优化 index === currentLyricIndex return
3.3. 歌词的文字匹配思路
3.4. 全部歌词的展示
一. 播放页功能
1.1. 歌词分页展示
- 上下有间距
- padding
- 根据当前的歌词进行滚动
- lyricIndex * 35
- 选中某一句歌词
- index === lyricIndex ? 'active'
1.2. 歌曲列表数据
- playerStore
- playSongList
- playSongIndex
1.3. 上一首/下一首
- index + 1 / -1
- 判断边界
- 获取当前歌曲
- 记录最新的索引
1.4. 播放模块的切换
- 0: 顺序播放
- 1: 单曲循环
- 2: 随机播放
二. Store代码重构(选做)
2.1. 播放歌曲的代码重构
- setupPlayMusic()
- playMusicWidthSongIdAction
2.2. 播放和暂停的功能
2.3. 播放模式的切换
2.4. 播放新歌曲的抽取
三. 首页的play-bar
3.1. 界面搭建
3.2. 交互的操作
3.3. 动画的展示
四. 项目打包和发布
4.1. 分包处理
4.2. 包的大小优化
- vant
4.3. 项目发布
- 成员管理
- 版本管理