項目是基於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喜歡的點個贊完 :)