模仿QQ音乐网页版界面,采用 flexbox 和 position 布局; mmPlayer 虽然是响应式,但主要以为 PC 端为主,移动端只做相应适配(未做歌词显示); 只做主流浏览器兼容(对 IE 说拜拜,想想以前做项目还要兼容 IE7 ,都是泪啊!!!)
api:一个开源的网易云音乐 NodeJS 版 API(有api才有动力写!!!)
mmPlayer
git clone https://github.com/maomao1996/Vue-mmPlayer.git //下载mmPlayer
cd mmPlayer //进入mmPlayer播放器目录
npm install //安装依赖
npm run dev //服务端运行
npm run build //项目打包
后台服务器
cd mmPlayer/server //进入后台服务器目录
npm install //安装依赖
node app.js //服务端运行 访问 http://localhost:3000
- Vue-Cli(Vue 脚手架工具)
- Vue(核心框架)
- Vue-Router(页面路由)
- Vuex(状态管理)
- ES 6 / 7 (JavaScript 语言的下一代标准)
- Less(CSS预处理器)
- Axios(网络请求)
- FastClick(解决移动端300ms点击延迟)
├── build // webpack配置文件
├── config // 项目打包路径
├── mmPlayer // 项目打包版本,可直接使用
├── screenshots // 项目截图
├── server // 后台服务器目录
├── src // 项目源码目录
│ ├── api // 数据交互目录
│ │ └── music.js // 获取数据
│ ├── assets // 资源目录
│ │ ├── css // 样式文件目录
│ │ │ ├── index.less // mmPlayer相关基础样式
│ │ │ ├── mixin.less // 样式混合
│ │ │ ├── reset.less // 样式重置
│ │ │ └── var.less // 样式变量(字体大小、字体颜色、背景颜色)
│ │ ├── img // 静态图片目录
│ │ └── js // 数据交互目录
│ │ ├── config.js // 基本配置
│ │ ├── mixin.js // 组件混合
│ │ ├── song.js // 数据处理
│ │ ├── storage.js // localstorage配置
│ │ └── util.js // 公用js方法
│ ├── base // 公共基础组件目录
│ │ ├── mm-dialog
│ │ │ └── mm-dialog.vue // 对话框组件
│ │ ├── mm-loading
│ │ │ └── mm-loading.vue // 加载动画组件
│ │ ├── mm-no-result
│ │ │ └── mm-no-result.vue // 暂无数据提示组件
│ │ ├── mm-progress
│ │ │ └── mm-progress.vue // 进度条拖动组件
│ │ └── mm-toast
│ │ └── mm-toast.vue // 弹出层提示组件
│ ├── components // 公共项目组件目录
│ │ ├── lyric
│ │ │ └── lyric // 歌词和封面组件
│ │ └── mm-header
│ │ │ └── mm-header.vue // 头部组件
│ │ ├── music-btn
│ │ │ └── music-btn.vue // 按钮组件
│ │ └── music-list
│ │ └── music-list.vue // 列表组件
│ ├── pages // 入口主文件
│ │ ├── comment
│ │ │ └── comment.vue // 评论
│ │ ├── details
│ │ │ └── details.vue // 排行榜详情
│ │ ├── historyList
│ │ │ └── historyList.vue // 我听过的(播放历史)
│ │ ├── playList
│ │ │ └── playList.vue // 正在播放
│ │ ├── search
│ │ │ └── search.vue // 搜索
│ │ ├── userList
│ │ │ └── userList.vue // 我的歌单
│ │ ├── topList
│ │ │ └── topList.vue // 排行榜页面
│ │ ├── mmPlayer.js // 播放器事相关件绑定
│ │ └── mmPlayer.vue // 播放器主页面
│ ├── router
│ │ └── index.js // 路由配置
│ ├── store // vuex的状态管理
│ │ ├── actions.js // 配置actions
│ │ ├── getters.js // 配置getters
│ │ ├── index.js // 引用vuex,创建store
│ │ ├── mutations.js // 配置mutations
│ │ ├── mutation-types.js // 定义常量mutations名
│ └── state.js // 配置state
│ ├── App.vue // 根组件
│ └── main.js // 入口主文件
├── static // 静态资源文件目录
└── index.html // 入口html文件
- 播放器
- 快捷键操作
- 歌词滚动
- 正在播放
- 排行榜
- 歌单详情
- 搜索
- 播放历史
- 查看评论
- 同步网易云歌单
PC端界面自我感觉还行, 就是移动端界面总觉得怪怪的,奈何审美有限,所以又去整了高仿网易云的 React 版本(如果小哥哥、小姐姐们有好看的界面,欢迎交流哈)
- 更新后台服务器
- 修复无法播放问题
- 修复歌单详情打开失败问题
- 修改音乐是否可用的判断逻辑
- 优化登录操作体验,增加回车事件监听
- 扩大查看评论者主页点击范围
- 修复列表只有一首歌时的 BUG
- 去除无关请求操作
- 优化请求播放列表逻辑
- 新增推荐歌单
- 新增图片懒加载
- 更新获取歌单列表接口
- 优化歌单列表展示
- 更新后台服务器
- 修改热搜展示数据
- 提取基础网络请求中的配置
- 新增评论详情功能(网易云音乐最重要的部分不能漏)
- 新增title提示
- 新增noscript提示
- 优化歌词滚动
- 优化图片大小,提升加载速度
- 优化歌曲切换时样式错乱
- 增强模块化
- 新增同步网易云歌单功能
- 新增快捷键控制
- 上一曲 Ctrl + Left
- 播放暂停 Ctrl + Space
- 下一曲 Ctrl + Right
- 切换播放模式 Ctrl + O
- 音量加 Ctrl + Up
- 音量减 Ctrl + Down
- 修复safari和安卓UC不能播放的问题
- 优化url失效问题和音乐无法播放的提示
- 优化移动端下的样式兼容
- 新增播放链接失效后自动重载当前音乐
- 优化列表循环不会自动下一曲问题
- 优化删除正在播放列表歌曲失效问题
- 优化删除歌曲过快会触发播放问题
- 优化音乐来源错误不能播放问题,并使用 oncanplay
- 添加播放历史,避免不能播放的音乐加入播放历史
- 修复不能加入音乐到我听过的问题
- 新增双击播放
- 新增更新提示
- 优化无歌词时的显示
- 优化暂无内容提醒
- 优化列表多位歌手的显示
- 新增随机播放、列表循环、单曲循环、顺序播放功能
- 新增清空正在播放列表功能
- 新增清空列表的提示
- 新增版权信息(控制台输入mmPlayer)
- 增加背景滤镜的模糊度和透明度
- 增加浏览器访问的限制(兼容主流浏览器,最好全是用chrome,哈哈)
- 整合music-list组件
- CSS的@import使用 ~ 代替相对路径(原理:css-loader会把把非根路径的url解释为相对路径,加~前缀才会解释成模块路径)
- 优化Safari下不能滚动和不能播放的问题
- 优化移动端300ms点击延迟
- 优化当播放列表只有一首歌时,点击上(下)一曲导致播放失败的问题
- 优化重复插入音乐的问题
- 优化暂停后播放下一首播放状态图标不改变的问题
- 优化正在播放列表第一次加载
- 优化删除歌曲
- 优化Vuex模块
- 优化加载loading
- 优化移动端适配
- 提高代码复用性
- 新增搜索功能
- 新增歌曲删除功能(播放历史列表)
- 使用ES6的class对数据进行二次处理
- 优化歌词居中显示
- 优化播放可能出现的错误
- 新增我听过的(播放历史)
- 整合公用列表组件
- 新增mmToast插件
- 整合字体大小、颜色相关CSS
- 优化清空正在播放列表功能
- 发布正式版(因为一系列原因,mmPlayer V1.0.0版本在试用版的基础上进行了重构了,并引入了Vue-Router和Vuex
- 当前播放歌曲高亮(感觉一个小GIF还不够)
- 优化快速切歌导致歌曲播放失败的问题
- 进度条拖动适配移动端
- 优化点击时可能出现的半透明背景
- 新增排行榜
- 个人练手项目(本想先做移动端的,但是发现有很多人都做过,就稍微标新立异做个PC端)
- 如果您喜欢该作品,您可以点右上角 "Star" "Fork" 表示支持 谢谢!
- 后续:移动端版本、其他作品
- 如有问题请直接在 Issues 中提,或者您发现问题并有非常好的解决方案,欢迎 PR