guokaigdg / react-netease-music

react+mobx打造移动端音乐播放站点,界面参考网易云音乐安卓7.x版本

Repository from Github https://github.comguokaigdg/react-netease-musicRepository from Github https://github.comguokaigdg/react-netease-music

moonlite-music 移动端音乐播放站点

react react-router-dom mobx license

项目线上地址 http://121.196.155.101:3000

请使用移动端浏览器预览,如果使用PC端,请切换到Chrome的移动端调试模式

  • 本项目的音频可视化效果用到了 AudioContext接口的 createMediaElementSource方法,该方法在iOS上存在BUG,会导致歌曲无法播放,因此针对iOS系统,去除了音频可视化效果,建议在Android系统上进行预览

  • 云村热评墙接口被官方下线了,所以首页云村那儿目前是空白的

项目说明

前端使用React进行开发(全面拥抱Hooks),状态管理库使用Mobx,并用vw布局进行移动端适配

后端使用开源项目NeteaseCloudMusicApi进行搭建

本项目UI参考网易云音乐Android App 7.x版本,除Swiper外,未使用第三方UI组件

主要动画效果均为手动实现,包括但不局限于:

  • 下拉刷新
  • 上拉加载
  • 滑动输入条Slider
  • 类似marquee的横向无缝循环滚动展示组件Ticker
  • 抽屉Drawer
  • 全局提示Toast
  • 对话框Dialog
  • 验证码输入框
  • ......

部分动画效果参考了:

本项目的音频可视化只是将连续的音频点进行平滑连接,但在起始和末尾相连的地方不够平整,更好的方法是用傅里叶变换进行采样,再进行平滑处理,具体可见网易云音乐大前端团队的文章——Android 音频可视化

值得注意的动画效果与交互

  1. 横向无缝循环滚动展示组件

    在mini播放器上与歌单详情页的顶部都有用到,主要的效果是:当文本长度大于盒子长度时,就会触发左侧横向无缝滚动效果,当文本抵达左侧边界时,会有停顿时间(可以设置),之后接着滚动。动画效果用requestAnimationFrame写的一个Hook实现的,组件用的时候也可以设置水平滚动方向、滚动速度以及两组文本间的间缝大小

  2. 播放页进度条、歌词的互动

    这里的效果较好地还原了网易云音乐安卓端的操作。首先可以上下滑动歌词,并且有一个指示条可以提示当前选中的歌词,点击可直接切换进度,而拖拽进度条也会实时显示进度,松手可切换进度,这个是通过封装的滑动输入条组件,提供了触摸时和触摸结束的钩子函数,返回滑块的进度

  3. mini播放器会实时显示歌词,并且可以左右滑动切换歌曲

功能预览

1

2

3

4

5

6

About

react+mobx打造移动端音乐播放站点,界面参考网易云音乐安卓7.x版本

License:MIT License


Languages

Language:JavaScript 80.4%Language:SCSS 18.6%Language:HTML 0.5%Language:CSS 0.4%