项目是基于Vue.js,成品是一个移动端的音乐播放器,来源于imooc的实战课程。本身动手实践并加以修改拓展。
项目的大体流程是Vue-cli构建开发环境,分析需求,设计构思,规划目录结构,开始编码。javascript
推荐页vue
歌手页java
歌手详情node
歌曲排行榜ios
排行榜详情git
搜索页github
用户中心web
全部数据都来自于QQ音乐,抓取自QQ的接口,大部分接口都是JSONP,抓取比较容易,其中一些接口限制了host
,不能直接抓取,采用的方法是用axios
代理,设置header
,以此绕过host
的限制。
PS:具体代码请看prod.server.js
文件npm
Vuejson
Vuex
Vue-Router
Vue-cli
Stylus
Axios
ESlint
Better-scroll
讲一讲player
播放器组件,播放器组件可谓是整个项目的核心,固然数据处理和用户体验方面也是不简单的(逃。
播放器是全局组件,放在App.vue
下面,经过Vuex
传递数据,触发action
提交mutation
,从而使播放器开始工做。固然,其中的数据交互说复杂也不是很复杂,就是要花多点时间理解,player
组件由多个基础组件构成,具体请看项目代码,下面上图
为了防止切换歌曲时点击速度过快致使歌曲播放错误,使用了
audio
的onplay
API,结合Vuex
获取到数据,判断当前歌曲数据请求到才能够切换下一首歌曲,判断函数以下
ready() { this.songReady = true }
经过调用QQ音乐的JSONP接口,获取的数据并不能直接拿来用,须要作进一步的规格化,达到咱们使用的要求,因此在这方面单独封装了一个class
来处理这方面的数据,具体请看src/common/js/song.js
在请求JSONP的时候,用到了一个JSONP库,这个库代码十分简短,只有几十行,有兴趣的同窗能够学习下。
使用时,就是将请求的参数拼接在请求url上,而后调用这个库的jsonp
方法。因此,在此封装了两个函数,一个是将参数拼接在url上,另外一个是将库里面的jsonp
方法Promise化,方便咱们使用,具体请查看src/common/js/jsonp.js
。
将请求的数据格式化后再经过Vuex
传递,组件间共享,实现歌曲的播放切换等。
该项目的不少地方都涉及到滚动,包括下拉滚动,下拉滚动刷新等。这里面用到了一个库(better-scroll
),来实现全部涉及到的滚动,建议学习下它的API。
其余动画包括了Vue
的transition
动画,路由之间切换时的简单动画,播放器打开时的动画,这个地方比较难,也比较好玩。
打开页面时的加载Loading效果,其实就是一个Loading组件,也比较简单。
为了减小流量,图片加载使用了懒加载的方式,滚动时再加载真实的图片。
具体效果请自身体验:)
# install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # run e2e tests npm run e2e # run all tests npm test
# build for production with minification npm run build # run node prod.server.js
经过学习该项目,本身收获了许多,实践中也遇到了大大小小许多问题,经过断点调试等最终解决了,对我来讲无疑是最大的鼓励,也但愿能与你们一块儿学习。
项目地址:https://github.com/k-water/vue-music喜欢的点个赞完 :)