如何用vue打造一个移动端音乐播放器
写在前面
- 没错,这就是慕课网上的那个vue音乐播放器,后台是某音乐播放器的线上接口扒取,虽然这类项目写的人很多,但不得不说这还是个少有的适合vue提升的好项目,做这个项目除了想写一个比较大并且功能复杂的项目,主要原因是要拿它来应对面试,也确实对我vue的业务能力有很全面的提升,也使我找工作更加得心应手
- 代码内容有区别于作者源码,因为作者编码习惯跟我有很大差别,或者说比我更高级,生搬硬套并没有太大的意义,如果有时间最好从头到尾都自己写,包括所有的样式,代码量比较大,我在业余时间去写大概一个月完成了这个项目,这还只是我跟随作者的架构去编码的情况下
- 项目基本完成,但因为我已入职,最近也没有时间去完善它,以下是项目的简介,更详细的介绍在github里欢迎访问
源码地址
[https://github.com/wwenj/web-music-player]
希望你能在这有所收获,欢迎star
项目简介
基于vue全家桶开发的一款移动端音乐播放器webapp,数据由qq音乐后台通过jsonp跨域和代理获取
技术栈
- 前端:vue全家桶,es6,sass,axios,jsonp,better-scroll
- 数据:qq音乐接口扒取
功能模块:
页面
- 推荐页: 轮播,推荐歌单,点击跳转详情组件 下3同
- 歌手页: 按姓氏首字母排列,点击侧面字母栏跳转到对应歌手区域
- 排行页: 几种榜单,详情页显示排行数字
- 搜索页: 搜索框监听内容变化显示搜索结果,搜索结果上拉加载,点击搜索结果添加到当前播放列表并播放该歌曲,搜索为歌手跳转歌手详情页;保存搜索历史,显示热门搜索标签
- 个人页: 选项卡显示最近播放历史,与我的收藏列表
- 播放页: 旋转大头像,播放时间,进度条,上一曲下一曲,收藏,播放模式(单曲-顺序-随机),歌词页,播放按钮,迷你底部播放栏(播放页收起时显示)
功能
- 播放列表: 显示当前播放列表,查看播放模式,清空列表,点击收藏,点击删除,点击添加歌曲到当前播放列表
- 添加歌曲到播放列表: 搜索歌曲添加,播放历史添加,搜索历史添加
- 播放组件: 拖动进度条跳转播放进度,歌词跟随进度联动
架构设计
- 15个业务组件,9个基础组件
- 详情组件,歌曲列表组件,搜索框组件,scroll组件,loading组件等组件多复用
vuex集中状态管理 :
- 搜索历史,收藏列表,播放历史
- 播放状态,播放模式,收起播放页,当前播放索引
- 排行榜数据,推荐歌单数据,歌手数据(进入详情页使用)
- 模块化:js模块写在assets内,数据请求模块写在api内,vuex写在mutation.js,state.js,getters.js,action.js中
- 移动端适配:淘宝适配方案
amfe-flexible,用sass函数统一rem为正常px逻辑单位 - 几种历史记录收藏列表存储在localStorage
项目测试
边界条件测试
- 歌曲未加载成功连续点击下一曲:设标志值,事件开始前做判断,当歌曲加载成功才能继续执行
- 选择播放歌曲当前正在播放:watch监听歌曲时,新旧值一致则不进行任何变化
- 顺序播放时播放列表中只有一首歌:判断只有一首歌时循环播放
- 删除播放列表歌曲的最后一首:关闭播放列表和播放页
- 未找到(搜索,收藏,历史等)任何数据:显示提示空信息组件
- 出现底部迷你播放页时,重新计算dom,显示正确scroll滚动位置
移动端测试
- 兼容:uc音乐播放器不能播放歌曲
- 滚动搜索结果出现小键盘:触摸搜索结果列表使input搜索框失焦
- 播放页收回动画卡慢:修改收回动画为改变透明度
项目总结
难点
- jsonp与代理,获取QQ音乐真实后台数据,获取数据的二次封装使用
- better-scroll 移动端插件(每次dom渲染要重新计算scroll宽度),封装成组件。
- vuex状态管理的项目结构设计
收获
- 业务: 清晰项目架构,学习良好的编程风格,Es6模块化写法,Eslint代码规范,vuex状态管理,常用组件的封装复用,
- 技术: jsonp跨域请求,vue更深入理解掌握更熟练
项目截图
推荐页,排行页,歌手页
搜索页,我的本地(收藏,播放历史)
详情页,播放列表,添加歌曲到播放列表
播放页,歌词页
作者 [王文健]
2018 年 8月 10日
本文转载于:猿2048→https://www.mk2048.com/blog/blog.php?id=hba0h01ahhj
如何用vue打造一个移动端音乐播放器的更多相关文章
- Hide-Music-Player 一个完整的音乐播放器《IT蓝豹》
Hide-Music-Player 一个完整的音乐播放器 Hide-Music-Player 一个完整的音乐播放器,本例子主要包括几个点 (1)摇一摇进入播放器 (2)下拉展开新视图(扫描音乐) (3 ...
- Swift - 制作一个在线流媒体音乐播放器(使用StreamingKit库)
在之前的文章中,我介绍了如何使用 AVPlayer 制作一个简单的音乐播放器(点击查看1.点击查看2).虽然这个播放器也可以播放网络音频,但其实际上是将音频文件下载到本地后再播放的. 本文演示如何使用 ...
- vue——一个页面实现音乐播放器
请忽略下面这段文字年关将至,时间好歹又多出了些许.却不敢过度消遣.岁月未曾饶过我,我亦不想饶过岁月.且将它塞得膨胀,让这一年看似加更充实.不曾料想我一个爱些风花雪月.研墨行歌之人,却做起了碼农这一行当 ...
- 用H5和js写一个移动端自定义播放器
前言 由于html5自带的播放器样式不怎么好看,大多数人都是自己写一个来满足业务需求.这一次的需求如下: 1.不要上一曲下一曲 2.有进度条和播放暂停按钮 3.有时间显示 demo实现功能 1.进度条 ...
- 用pyqt5做一个简易的音乐播放器
需求 要求可以读取音频文档,有播放和暂停的功能 附上代码(1)UI界面 # -*- coding: utf-8 -*- # Form implementation generated from rea ...
- Ubuntu 下一个可用的音乐播放器
参考:http://www.pairsdoll.com/install-audacious-music-palyer-in-ubuntu.html/ 方法:打开terminal,sudo apt-ge ...
- JS写一个漂亮的音乐播放器
先放上效果图: 正如图中所展示的播放器那样,我们用HTML+CSS+JS将这个效果实现出来. HTML页面布局 <div class="music"> <div ...
- vue音乐播放器
利用vue写一个简单的音乐播放器,包括功能有歌曲搜索.歌曲播放.歌曲封面.歌曲评论.播放动画.mv播放六个功能. <template> <div class="wrap&q ...
- 用<audio>标签打造一个属于自己的HTML5音乐播放器
上一章节,我们刚刚讲了<video>标签,今晚,我们讲的是<audio>标签,这两个东东除了表示的内容不一样以外,其他的特性相似的地方真的太多了,属性和用法几乎一样,也就说,如 ...
随机推荐
- django-admin常用总结
django-admin常用总结 1.modelAdmin 1.1 list_display:显示列表. 1.2 search_fields:可被搜索的字段. 1.3 list_per_page:显示 ...
- WPF优秀组件推荐之MahApps
概述 MahApps是一套基于WPF的界面组件,通过该组件,可以使用较小的开发成本实现一个相对很好的界面效果. 官方网站:MahApps.Metro - Home 开源代码:MahApps · Git ...
- python+pytest接口自动化(6)-请求参数格式的确定
我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请求主体的编码方式为 applicat ...
- 矩池云上使用nvidia-smi命令教程
简介 nvidia-smi全称是NVIDIA System Management Interface ,它是一个基于NVIDIA Management Library(NVML)构建的命令行实用工具, ...
- IDEA连接Gitee
1.gitee 1.公钥配置 公钥的作用:身份验证,免去每次提交或拉去的登录操作. 1.安装git --> 鼠标右键 --> Git Bash Here -->进入命令窗口 命令一: ...
- 路径查找算法应用之A*算法
环境:Visual Studio 2017 + .Net Framework 4.5 应用场景:在画板上查找起始点和目标点之间的最短最直路径,最后画出连接两个点之间的折线. 算法简介:A*算法是一种性 ...
- SpringCloud微服务之Ribbon负载均衡(一)
什么是微服务?什么是SpringCloud? 微服务是一种架构的模式,它提倡将一个应用程序划分成很多个微小的服务,服务与服务之间相互协调.相互配合.每个服务运行都是一个独立的进程,服务与服务之间采用轻 ...
- 聊聊磁盘 IO
常见的磁盘类型 按存储原理的不同,可以把磁盘分为这么几种 HDD 盘:没啥说的,就是平时最常见的机械盘. SSD 盘:用电信号来记录存储数据,而不是磁片.显然进行 I/O 时,这要比机械盘的物理寻址方 ...
- 什么是CSRF跨站请求伪造?(from表单效验csrf-ajdax效验csrf-Ajax设置csrf-CBV装饰器验证csrf)
目录 一:csrf跨站请求伪造 1.什么是CSRF? 2.CSRF攻击案例(钓鱼网站) 3.钓鱼网站 内部原理 4.CSRF原理(钓鱼网站内部本质) 5.从上图可以看出,要完成一次CSRF攻击,受害者 ...
- Nginx高并发实现原理以及常用的优化手段
Nginx 是如何实现高并发的? 异步,非阻塞,使用了epoll 和大量的底层代码优化. 如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数.正常情况下,会有很多进程一 ...