├── .browserslistrc ├── .gitignore ├── LICENSE ├── README.md ├── babel.config.js ├── dist ├── css │ ├── app.c960b78a.css │ ├── chunk-0365dbbf.79b40ee0.css │ ├── chunk-0497c285.e901f6c7.css │ ├── chunk-16c802da.5ad8c971.css │ ├── chunk-198b7478.fb6418a8.css │ ├── chunk-2118b4ab.4d6f9ed5.css │ ├── chunk-4f17f3a5.38aad8d9.css │ ├── chunk-56f6e41b.962470a6.css │ ├── chunk-76fd7d5c.cb30ee38.css │ ├── chunk-ef101f3a.6e54fed6.css │ └── chunk-vendors.779f7d1d.css ├── favicon.ico ├── fonts │ ├── iconfont.ee5a40ec.eot │ └── iconfont.f302356e.ttf ├── img │ └── iconfont.ed00bee3.svg ├── index.html └── js │ ├── app.73d026af.js │ ├── app.73d026af.js.map │ ├── chunk-0365dbbf.c960f7ae.js │ ├── chunk-0365dbbf.c960f7ae.js.map │ ├── chunk-0497c285.5a92c14f.js │ ├── chunk-0497c285.5a92c14f.js.map │ ├── chunk-0e1818d4.a2d7ca01.js │ ├── chunk-0e1818d4.a2d7ca01.js.map │ ├── chunk-16c802da.0af9827c.js │ ├── chunk-16c802da.0af9827c.js.map │ ├── chunk-198b7478.5dbfbec3.js │ ├── chunk-198b7478.5dbfbec3.js.map │ ├── chunk-2118b4ab.2eeabadc.js │ ├── chunk-2118b4ab.2eeabadc.js.map │ ├── chunk-4f17f3a5.86bbe3eb.js │ ├── chunk-4f17f3a5.86bbe3eb.js.map │ ├── chunk-56f6e41b.419c27a1.js │ ├── chunk-56f6e41b.419c27a1.js.map │ ├── chunk-76fd7d5c.461afc2d.js │ ├── chunk-76fd7d5c.461afc2d.js.map │ ├── chunk-ef101f3a.bf9ebe25.js │ ├── chunk-ef101f3a.bf9ebe25.js.map │ ├── chunk-vendors.d3a389a0.js │ └── chunk-vendors.d3a389a0.js.map ├── package.json ├── postcss.config.js ├── public ├── favicon.ico └── index.html ├── src ├── App.vue ├── api │ ├── getAlbumData.js │ ├── getHotKey.js │ ├── getRecommendData.js │ ├── getSingerlistData.js │ └── getToplistsData.js ├── assets │ ├── css │ │ ├── my-mint.css │ │ └── reset.css │ ├── font │ │ ├── demo.css │ │ ├── demo_fontclass.html │ │ ├── demo_symbol.html │ │ ├── demo_unicode.html │ │ ├── iconfont.css │ │ ├── iconfont.eot │ │ ├── iconfont.js │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ └── iconfont.woff │ ├── img │ │ ├── icon_list_menu.png │ │ ├── lazy.png │ │ ├── lazy1.jpg │ │ ├── list_sprite.png │ │ ├── loading.gif │ │ ├── logo.png │ │ ├── logo2.png │ │ └── player.png │ └── js │ │ ├── jsonp.js │ │ ├── song.js │ │ └── util.js ├── components │ ├── IndexHead.vue │ ├── Loading.vue │ ├── PageHeader.vue │ ├── PlayList.vue │ ├── Player.vue │ ├── ProgressBar.vue │ ├── ProgressCircle.vue │ └── SongList.vue ├── main.js ├── router.js ├── store.js └── views │ ├── Album.vue │ ├── Home.vue │ ├── HotSongSheet.vue │ ├── SIngerlist.vue │ ├── Search.vue │ ├── Singer.vue │ ├── Toplist.vue │ ├── Toplists.vue │ └── User.vue └── vue.config.js /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not ie <= 8 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | 4 | # local env files 5 | .env.local 6 | .env.*.local 7 | 8 | # Log files 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | 13 | # Editor directories and files 14 | .idea 15 | .vscode 16 | *.suo 17 | *.ntvs* 18 | *.njsproj 19 | *.sln 20 | *.sw* 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Chrisping 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 基于Vue-cli3重写vue-QQmusic 2 | 3 | 4 | 项目预览地址:[Vue-QQmusic](https://timelessover.github.io/vue-QQmusic/dist/index.html#/) 5 | 6 | 7 | 二维码: 8 | 9 | 10 | ![](https://upload-images.jianshu.io/upload_images/8562733-157172662bba93c3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/400) 11 | 12 | 13 | ### 技术栈 14 | 15 | - vue 16 | - vue-router 17 | - vuex 18 | - axios 19 | - mint-ui 20 | - vue-cli3 21 | - scss 22 | - jsonp(跨域) 23 | 24 |
25 | 26 | ### 实现的功能 27 | - [x] 首页 28 | - [x] 歌手页面 29 | - [x] 排行榜 30 | - [x] 搜索页面(接口不稳定) 31 | - [x] 播放器 32 | - [x] 播放历史记录 33 | - [x] 播放模式切换 34 |
35 | 36 | ### 项目截图 37 | ![播放器](https://upload-images.jianshu.io/upload_images/8562733-df2f215053cf04ff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)![首页](https://upload-images.jianshu.io/upload_images/8562733-74adb508015b9db5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)![歌手](https://upload-images.jianshu.io/upload_images/8562733-65623bce6f18fa6e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)![搜索](https://upload-images.jianshu.io/upload_images/8562733-9097bff9fd855c5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300) 38 | 39 | 40 |
41 | 42 | ### 项目目录结构 43 | ![结构目录](https://upload-images.jianshu.io/upload_images/8562733-067d8864c4390bd1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 44 |
45 | + api存放获取后端数据的js,以及一些封装; 46 | + assets主要存放静态的img、js、font、css等 47 | + components主要存放公用组件 48 | + page主要存放路由跳转的组件 49 | + router.js存放路由 50 | + store.js存放状态管理 51 | + App.vue是项目根组件 52 | + main.js是项目入口文件 53 |
54 | 55 | ## Build Setup 56 | 57 | ``` bash 58 | # install dependencies 59 | yarn 60 | 61 | # serve with hot reload at localhost:8080 62 | yarn serve 63 | 64 | # build for production with minification 65 | yarn build 66 | 67 | # build for production and view the bundle analyzer report 68 | yarn build --report 69 | ``` 70 |
71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /dist/css/chunk-0365dbbf.79b40ee0.css: -------------------------------------------------------------------------------- 1 | .loading[data-v-c4ae9964]{text-align:center}.loading img[data-v-c4ae9964]{width:24px;height:24px}.desc[data-v-c4ae9964]{margin-top:10px;margin-right:-8px;font-size:14px;color:#666}.page-header[data-v-c0472a44]{position:fixed;z-index:20;top:0;left:0;width:100%;height:44px;line-height:44px;background-size:cover;background-repeat:no-repeat}.page-header[data-v-c0472a44]:before{content:"";position:absolute;z-index:8;top:0;left:0;width:100%;height:44px;background-color:rgba(10,10,10,.2)}.page-header i[data-v-c0472a44]{position:absolute;z-index:10;left:15px;font-size:25px;color:#fff}.page-header h3[data-v-c0472a44]{position:absolute;z-index:9;width:100%;height:44px;font-size:18px;font-weight:400;color:#fff;text-align:center}.song-list .loading-container[data-v-04f8dc7a]{margin:150px 0}.song-list ul[data-v-04f8dc7a]{position:relative}.song-list .playall[data-v-04f8dc7a]{position:absolute;top:20px;right:-10px;width:95px;height:23px;line-height:23px;border-radius:20px;background-color:#31c27c;text-align:center;color:#fff;font-size:14px}.slide-enter-active[data-v-04f8dc7a],.slide-leave-active[data-v-04f8dc7a]{-webkit-transition:.5s;transition:.5s}.slide-enter[data-v-04f8dc7a],.slide-leave-to[data-v-04f8dc7a]{-webkit-transform:translateX(85px);transform:translateX(85px)}.song-list .song[data-v-04f8dc7a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;margin:20px 0;border-left:3px solid #fff}.song-list .song:nth-child(-n+4) .ranking[data-v-04f8dc7a]{color:#ff400b}.song-list .ranking[data-v-04f8dc7a]{height:80%;margin-right:20px;font-size:16px;color:#777}.song-list .text[data-v-04f8dc7a]{width:80%}.song-list h3[data-v-04f8dc7a]{color:#444;font-size:15px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song-list p[data-v-04f8dc7a]{color:#777;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song-list .playing-item[data-v-04f8dc7a]{color:#31c27c}.song-list .playing-item-b[data-v-04f8dc7a]{border-left:3px solid #31c27c}.slide-enter-active[data-v-4d7573ca],.slide-leave-active[data-v-4d7573ca]{-webkit-transition:all .3s;transition:all .3s}.slide-enter[data-v-4d7573ca],.slide-leave-to[data-v-4d7573ca]{-webkit-transform:translateX(100%);transform:translateX(100%)}.toplist[data-v-4d7573ca]{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#fff;overflow:auto}.toplist-header[data-v-4d7573ca]{position:absolute;top:0;left:0;z-index:10;width:100%;height:274px;overflow:hidden;color:#fff;background:#fff}.toplist-box-bd[data-v-4d7573ca]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;background:rgba(0,0,0,.5)}.toplist-box-bg[data-v-4d7573ca]{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-webkit-filter:blur(36px);filter:blur(36px);-webkit-transform:scale(1.1);transform:scale(1.1)}.toplist-info[data-v-4d7573ca]{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:65px;padding:0 16px;-webkit-box-sizing:content-box;box-sizing:content-box}.toplist-info .media-img img[data-v-4d7573ca]{width:125px;height:125px}.toplist-info .media-text[data-v-4d7573ca]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:10px;font-family:sans-serif}.toplist-info .media-text h2[data-v-4d7573ca]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:18px;font-weight:400}.toplist-info .media-text div[data-v-4d7573ca]{margin-top:8px;font-size:14px}.toplist-info .media-text p[data-v-4d7573ca]{margin-top:8px;font-size:12px}.navbar[data-v-4d7573ca]{height:50px;margin-top:274px;background-color:#fff;letter-spacing:3px}.main[data-v-4d7573ca]{padding-bottom:100px}.info[data-v-4d7573ca]{margin:20px 30px;color:#333}.loading-more[data-v-4d7573ca]{text-align:center}.loading-more button[data-v-4d7573ca]{display:inline-block;border:none;outline:none;color:#777;background-color:#fff}.arrow[data-v-4d7573ca]{display:inline-block;width:6px;height:6px;margin-left:10px;-webkit-box-sizing:content-box;box-sizing:content-box;vertical-align:middle;border-right:1px solid #777;border-bottom:1px solid #777;-webkit-transform:translateY(-5px) rotate(45deg);transform:translateY(-5px) rotate(45deg)} -------------------------------------------------------------------------------- /dist/css/chunk-0497c285.e901f6c7.css: -------------------------------------------------------------------------------- 1 | .page-header[data-v-c0472a44]{position:fixed;z-index:20;top:0;left:0;width:100%;height:44px;line-height:44px;background-size:cover;background-repeat:no-repeat}.page-header[data-v-c0472a44]:before{content:"";position:absolute;z-index:8;top:0;left:0;width:100%;height:44px;background-color:rgba(10,10,10,.2)}.page-header i[data-v-c0472a44]{position:absolute;z-index:10;left:15px;font-size:25px;color:#fff}.page-header h3[data-v-c0472a44]{position:absolute;z-index:9;width:100%;height:44px;font-size:18px;font-weight:400;color:#fff;text-align:center}.loading[data-v-c4ae9964]{text-align:center}.loading img[data-v-c4ae9964]{width:24px;height:24px}.desc[data-v-c4ae9964]{margin-top:10px;margin-right:-8px;font-size:14px;color:#666}.song-list .loading-container[data-v-04f8dc7a]{margin:150px 0}.song-list ul[data-v-04f8dc7a]{position:relative}.song-list .playall[data-v-04f8dc7a]{position:absolute;top:20px;right:-10px;width:95px;height:23px;line-height:23px;border-radius:20px;background-color:#31c27c;text-align:center;color:#fff;font-size:14px}.slide-enter-active[data-v-04f8dc7a],.slide-leave-active[data-v-04f8dc7a]{-webkit-transition:.5s;transition:.5s}.slide-enter[data-v-04f8dc7a],.slide-leave-to[data-v-04f8dc7a]{-webkit-transform:translateX(85px);transform:translateX(85px)}.song-list .song[data-v-04f8dc7a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;margin:20px 0;border-left:3px solid #fff}.song-list .song:nth-child(-n+4) .ranking[data-v-04f8dc7a]{color:#ff400b}.song-list .ranking[data-v-04f8dc7a]{height:80%;margin-right:20px;font-size:16px;color:#777}.song-list .text[data-v-04f8dc7a]{width:80%}.song-list h3[data-v-04f8dc7a]{color:#444;font-size:15px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song-list p[data-v-04f8dc7a]{color:#777;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song-list .playing-item[data-v-04f8dc7a]{color:#31c27c}.song-list .playing-item-b[data-v-04f8dc7a]{border-left:3px solid #31c27c}.slide-enter-active[data-v-38456438],.slide-leave-active[data-v-38456438]{-webkit-transition:all .3s;transition:all .3s}.slide-enter[data-v-38456438],.slide-leave-to[data-v-38456438]{-webkit-transform:translateX(100%);transform:translateX(100%)}.album[data-v-38456438]{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fff}.album-header[data-v-38456438]{position:absolute;top:0;left:0;z-index:10;width:100%;height:274px;overflow:hidden;color:#fff;background:#fff}.album-box-bd[data-v-38456438]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;background:rgba(0,0,0,.5)}.album-box-bg[data-v-38456438]{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-webkit-filter:blur(36px);filter:blur(36px);-webkit-transform:scale(1.1);transform:scale(1.1)}.album-info[data-v-38456438]{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:85px;padding:0 16px;-webkit-box-sizing:content-box;box-sizing:content-box}.album-info .media-img img[data-v-38456438]{width:125px;height:125px}.album-info .media-text[data-v-38456438]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:10px;font-family:sans-serif}.album-info .media-text h2[data-v-38456438]{font-size:18px;font-weight:400}.album-info .media-text div[data-v-38456438]{margin-top:8px;font-size:14px}.album-info .media-text img[data-v-38456438]{width:24px;height:24px;margin-right:5px;border-radius:50%;vertical-align:middle}.album-info .media-text p[data-v-38456438]{margin-top:8px;font-size:12px}.navbar[data-v-38456438]{height:50px;margin-top:274px;background-color:#fff;letter-spacing:3px}.main[data-v-38456438]{margin-bottom:80px}.main h3[data-v-38456438]{color:#333;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.otherAlbums[data-v-38456438]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.otherAlbums li[data-v-38456438]{width:32.5%}.otherAlbums .media-text[data-v-38456438]{padding:0 3px}.otherAlbums img[data-v-38456438]{width:100%;height:auto}.otherAlbums p[data-v-38456438]{color:#777;font-size:14px}.main h2[data-v-38456438]{margin:40px 0 20px;font-size:17px;font-weight:400;text-align:center;letter-spacing:5px;color:#555}.description p[data-v-38456438]{margin:0 30px 60px;font-size:14px;color:#777} -------------------------------------------------------------------------------- /dist/css/chunk-16c802da.5ad8c971.css: -------------------------------------------------------------------------------- 1 | .search-bar[data-v-bece5800]{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f4f4f4;padding:10px}.input-warp[data-v-bece5800]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;height:20px;padding:8px 10px;background-color:#fff;-webkit-box-sizing:content-box;box-sizing:content-box;color:rgba(0,0,0,.3)}.input-warp i[data-v-bece5800]{font-size:18px}input[data-v-bece5800]::-webkit-input-placeholder{color:rgba(0,0,0,.3)}.input-warp input[data-v-bece5800]{margin:0 5px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;outline:none;color:rgba(0,0,0,.3)}.cancel-btn[data-v-bece5800]{height:36px;line-height:36px;font-size:14px;padding:0 5px 0 15px;color:#555}.hot-keys[data-v-bece5800]{padding:15px}.hot-keys>h3[data-v-bece5800]{color:rgba(0,0,0,.6);margin-bottom:15px;font-size:16px}.hot-keys li[data-v-bece5800]{display:inline-block;padding:5px 10px;margin:0 20px 10px 0;border-radius:6px;font-size:14px;color:#000;border:1px solid rgba(0,0,0,.6)}.search-suggestion[data-v-bece5800]{height:300px;overflow:auto}.search-suggestion li[data-v-bece5800]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 20px}.search-suggestion .allLoaded[data-v-bece5800]{display:block;text-align:center;color:rgba(0,0,0,.6)}.search-suggestion .media-icon i[data-v-bece5800]{font-size:30px;color:rgba(0,0,0,.6)}.search-suggestion .media-text[data-v-bece5800]{width:80%;margin-left:10px}.search-suggestion .media-text h3[data-v-bece5800]{color:#444;font-size:15px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.search-suggestion .media-text p[data-v-bece5800]{color:#777;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.search-history li[data-v-bece5800]{position:relative;padding:10px 20px;color:rgba(0,0,0,.6)}.search-history .clearlist[data-v-bece5800]{display:block;width:170px;margin:0 auto;color:#777}.search-history .clearlist i[data-v-bece5800]{color:#777;font-size:18px}.search-history .history i[data-v-bece5800]{display:inline-block;font-size:23px;margin-right:15px;-webkit-transform:translateY(2px);transform:translateY(2px);vertical-align:bottom}.search-history .cha[data-v-bece5800]{position:absolute;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#ccc;font-size:28px} -------------------------------------------------------------------------------- /dist/css/chunk-198b7478.fb6418a8.css: -------------------------------------------------------------------------------- 1 | .loading[data-v-c4ae9964]{text-align:center}.loading img[data-v-c4ae9964]{width:24px;height:24px}.desc[data-v-c4ae9964]{margin-top:10px;margin-right:-8px;font-size:14px;color:#666}.page-header[data-v-c0472a44]{position:fixed;z-index:20;top:0;left:0;width:100%;height:44px;line-height:44px;background-size:cover;background-repeat:no-repeat}.page-header[data-v-c0472a44]:before{content:"";position:absolute;z-index:8;top:0;left:0;width:100%;height:44px;background-color:rgba(10,10,10,.2)}.page-header i[data-v-c0472a44]{position:absolute;z-index:10;left:15px;font-size:25px;color:#fff}.page-header h3[data-v-c0472a44]{position:absolute;z-index:9;width:100%;height:44px;font-size:18px;font-weight:400;color:#fff;text-align:center}.song-list .loading-container[data-v-04f8dc7a]{margin:150px 0}.song-list ul[data-v-04f8dc7a]{position:relative}.song-list .playall[data-v-04f8dc7a]{position:absolute;top:20px;right:-10px;width:95px;height:23px;line-height:23px;border-radius:20px;background-color:#31c27c;text-align:center;color:#fff;font-size:14px}.slide-enter-active[data-v-04f8dc7a],.slide-leave-active[data-v-04f8dc7a]{-webkit-transition:.5s;transition:.5s}.slide-enter[data-v-04f8dc7a],.slide-leave-to[data-v-04f8dc7a]{-webkit-transform:translateX(85px);transform:translateX(85px)}.song-list .song[data-v-04f8dc7a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;margin:20px 0;border-left:3px solid #fff}.song-list .song:nth-child(-n+4) .ranking[data-v-04f8dc7a]{color:#ff400b}.song-list .ranking[data-v-04f8dc7a]{height:80%;margin-right:20px;font-size:16px;color:#777}.song-list .text[data-v-04f8dc7a]{width:80%}.song-list h3[data-v-04f8dc7a]{color:#444;font-size:15px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song-list p[data-v-04f8dc7a]{color:#777;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song-list .playing-item[data-v-04f8dc7a]{color:#31c27c}.song-list .playing-item-b[data-v-04f8dc7a]{border-left:3px solid #31c27c}.slide-enter-active[data-v-10c518da],.slide-leave-active[data-v-10c518da]{-webkit-transition:all .3s;transition:all .3s}.slide-enter[data-v-10c518da],.slide-leave-to[data-v-10c518da]{-webkit-transform:translateX(100%);transform:translateX(100%)}.filter[data-v-10c518da]{-webkit-filter:blur(2px);-moz-filter:blur(2px);-o-filter:blur(2px);-ms-filter:blur(2px);filter:blur(2px)}.loading-container[data-v-10c518da]{margin:150px 0}.singer[data-v-10c518da]{position:absolute;z-index:10;top:0;left:0;width:100%;height:100%;background-color:#fff}.background[data-v-10c518da]{position:fixed;z-index:-1;width:100%;height:274px;background-size:cover;background-repeat:no-repeat}.background[data-v-10c518da]:before{content:"";position:absolute;top:0;left:0;width:100%;height:274px;background-color:rgba(10,10,10,.2)}.navbar[data-v-10c518da]{height:50px;margin-top:274px;background-color:#fff;letter-spacing:3px}.main[data-v-10c518da]{background-color:#fff;margin-bottom:80px}.fiexd-top[data-v-10c518da]{position:fixed;z-index:40;top:44px;left:0;width:100%;margin-top:0}.album[data-v-10c518da]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;height:100px;margin:20px}.album img[data-v-10c518da]{width:100px;height:100px}.album .media-text[data-v-10c518da]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around;width:60%;height:50px;margin-left:20px}.album h3[data-v-10c518da]{font-size:14px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.album p[data-v-10c518da]{color:#666;font-size:14px}.mvlist-title[data-v-10c518da]{margin:40px 0 20px;font-size:17px;font-weight:400;text-align:center;letter-spacing:5px;color:#333}.mv-ul[data-v-10c518da]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%;margin:20px 5px}.mv[data-v-10c518da]{width:48%;margin-right:5px}.mv img[data-v-10c518da]{width:100%;height:auto}.mv h3[data-v-10c518da]{font-size:16px;font-weight:400;color:#333;padding-left:10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin:5px 0 3px}.mv p[data-v-10c518da]{margin-bottom:20px;padding-left:10px;font-size:14px;color:#333} -------------------------------------------------------------------------------- /dist/css/chunk-2118b4ab.4d6f9ed5.css: -------------------------------------------------------------------------------- 1 | .slide-enter-active[data-v-2d093c58],.slide-leave-active[data-v-2d093c58]{-webkit-transition:all .3s;transition:all .3s}.slide-enter[data-v-2d093c58],.slide-leave-to[data-v-2d093c58]{-webkit-transform:translateX(100%);transform:translateX(100%)}.user[data-v-2d093c58]{left:0;height:100%;overflow:auto}.top[data-v-2d093c58],.user[data-v-2d093c58]{position:fixed;top:0;width:100%;background-color:#fff}.top[data-v-2d093c58]{z-index:7;height:44px;line-height:44px}.top .back-i[data-v-2d093c58]{position:absolute;z-index:10;left:15px;font-size:25px;color:#31c27c}.switch[data-v-2d093c58]{width:240px;height:30px;margin:6px auto 0;-webkit-box-sizing:content-box;box-sizing:content-box;border:1px solid #fff;overflow:hidden;border-radius:5px}.switch-item[data-v-2d093c58]{float:left;width:50%;height:30px;line-height:30px;text-align:center;background-color:#ddd;color:#fff}.active[data-v-2d093c58]{background-color:#31c27c}.container-item[data-v-2d093c58]{margin:44px 0 80px;overflow:hidden}.item[data-v-2d093c58]{position:relative;padding:0 30px 0 20px;margin:20px 0}.item h3[data-v-2d093c58]{color:#444;font-size:15px}.item h3[data-v-2d093c58],.item p[data-v-2d093c58]{width:80%;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.item p[data-v-2d093c58]{color:#777;font-size:14px}.item span[data-v-2d093c58]{position:absolute;top:50%;right:30px;color:#999;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.empty[data-v-2d093c58]{position:absolute;top:50%;left:50%;width:100%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;font-size:12px;color:#777}.empty i[data-v-2d093c58]{display:inline-block;font-size:88px;color:#ddd;margin-bottom:10px}.play-btn[data-v-2d093c58]{width:135px;height:32px;padding:7px 0;margin:20px auto;text-align:center;border:1px solid #31c27c;color:#31c27c;border-radius:100px;font-size:12px}.play-btn i[data-v-2d093c58]{font-size:16px;vertical-align:middle}.clearlist[data-v-2d093c58]{width:100px;text-align:center;margin:30px auto 0;color:#777}.item .play-song[data-v-2d093c58]{color:#31c27c} -------------------------------------------------------------------------------- /dist/css/chunk-4f17f3a5.38aad8d9.css: -------------------------------------------------------------------------------- 1 | ul[data-v-2999b0d0]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}li[data-v-2999b0d0]{width:50%}.recommend[data-v-2999b0d0]{margin-bottom:80px}.slider[data-v-2999b0d0]{width:100%;height:150px}.slider a[data-v-2999b0d0]{display:block}.slider img[data-v-2999b0d0]{width:100%;height:150px}.radio-list[data-v-2999b0d0]{min-height:250px;text-align:center}.title[data-v-2999b0d0]{padding:10px 0 5px 10px;font-size:16px;color:#000;text-align:left}.media-img[data-v-2999b0d0]{position:relative}.radio-list .radio-play[data-v-2999b0d0]{position:absolute;top:50%;left:50%;width:48px;height:48px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-image:url(data:image/png;base64,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)}.radio-list img[data-v-2999b0d0]{width:85%;height:auto;border-radius:50%}.radio-list p[data-v-2999b0d0]{margin:10px 0;font-size:14px}.radio-list .radio-playing[data-v-2999b0d0]{background-position-y:-50px}.radio-list .radio-pause[data-v-2999b0d0]{background-position-y:0}.song-list ul[data-v-2999b0d0]{background-color:#f4f4f4;padding:0 10px}.song-list li[data-v-2999b0d0]{width:49%;margin-bottom:10px}.song-list a[data-v-2999b0d0]{display:block}.song-list img[data-v-2999b0d0]{width:100%}.song-list .play[data-v-2999b0d0]{position:absolute;right:5px;bottom:5px;width:24px;height:24px;background-image:url(data:image/png;base64,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);background-size:cover}.song-list p[data-v-2999b0d0]{height:55px;padding:5px 0 15px 7px;color:#000;font-weight:400;font-size:14px;background-color:#fff} -------------------------------------------------------------------------------- /dist/css/chunk-56f6e41b.962470a6.css: -------------------------------------------------------------------------------- 1 | .page-header[data-v-c0472a44]{position:fixed;z-index:20;top:0;left:0;width:100%;height:44px;line-height:44px;background-size:cover;background-repeat:no-repeat}.page-header[data-v-c0472a44]:before{content:"";position:absolute;z-index:8;top:0;left:0;width:100%;height:44px;background-color:rgba(10,10,10,.2)}.page-header i[data-v-c0472a44]{position:absolute;z-index:10;left:15px;font-size:25px;color:#fff}.page-header h3[data-v-c0472a44]{position:absolute;z-index:9;width:100%;height:44px;font-size:18px;font-weight:400;color:#fff;text-align:center}.loading[data-v-c4ae9964]{text-align:center}.loading img[data-v-c4ae9964]{width:24px;height:24px}.desc[data-v-c4ae9964]{margin-top:10px;margin-right:-8px;font-size:14px;color:#666}.song-list .loading-container[data-v-04f8dc7a]{margin:150px 0}.song-list ul[data-v-04f8dc7a]{position:relative}.song-list .playall[data-v-04f8dc7a]{position:absolute;top:20px;right:-10px;width:95px;height:23px;line-height:23px;border-radius:20px;background-color:#31c27c;text-align:center;color:#fff;font-size:14px}.slide-enter-active[data-v-04f8dc7a],.slide-leave-active[data-v-04f8dc7a]{-webkit-transition:.5s;transition:.5s}.slide-enter[data-v-04f8dc7a],.slide-leave-to[data-v-04f8dc7a]{-webkit-transform:translateX(85px);transform:translateX(85px)}.song-list .song[data-v-04f8dc7a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;margin:20px 0;border-left:3px solid #fff}.song-list .song:nth-child(-n+4) .ranking[data-v-04f8dc7a]{color:#ff400b}.song-list .ranking[data-v-04f8dc7a]{height:80%;margin-right:20px;font-size:16px;color:#777}.song-list .text[data-v-04f8dc7a]{width:80%}.song-list h3[data-v-04f8dc7a]{color:#444;font-size:15px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song-list p[data-v-04f8dc7a]{color:#777;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song-list .playing-item[data-v-04f8dc7a]{color:#31c27c}.song-list .playing-item-b[data-v-04f8dc7a]{border-left:3px solid #31c27c}.loading-container[data-v-1c7eed80]{margin:150px 0}.slide-enter-active[data-v-1c7eed80],.slide-leave-active[data-v-1c7eed80]{-webkit-transition:all .3s;transition:all .3s}.slide-enter[data-v-1c7eed80],.slide-leave-to[data-v-1c7eed80]{-webkit-transform:translateX(100%);transform:translateX(100%)}.song-sheet[data-v-1c7eed80]{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#fff;overflow:auto}.sheet-header[data-v-1c7eed80]{position:absolute;top:0;left:0;z-index:10;width:100%;height:274px;overflow:hidden;color:#fff;background:#fff}.sheet-box-bd[data-v-1c7eed80]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;background:rgba(0,0,0,.5)}.sheet-box-bg[data-v-1c7eed80]{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-webkit-filter:blur(36px);filter:blur(36px);-webkit-transform:scale(1.1);transform:scale(1.1)}.sheet-info[data-v-1c7eed80]{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:85px;padding:0 16px;-webkit-box-sizing:content-box;box-sizing:content-box}.sheet-info .media-img img[data-v-1c7eed80]{width:125px;height:125px}.sheet-info .media-text[data-v-1c7eed80]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:10px;font-family:sans-serif}.sheet-info .media-text h2[data-v-1c7eed80]{font-size:18px;font-weight:400}.sheet-info .media-text div[data-v-1c7eed80]{margin-top:8px;font-size:14px}.sheet-info .media-text img[data-v-1c7eed80]{width:24px;height:24px;margin-right:5px;border-radius:50%;vertical-align:middle}.sheet-info .media-text p[data-v-1c7eed80]{margin-top:8px;font-size:12px}.navbar[data-v-1c7eed80]{height:50px;margin-top:274px;background-color:#fff;letter-spacing:3px}.main[data-v-1c7eed80]{padding-bottom:80px}.main h3[data-v-1c7eed80]{color:#444;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main h2[data-v-1c7eed80]{margin:40px 0 20px;font-size:17px;font-weight:400;text-align:center;letter-spacing:5px;color:#555}.description p[data-v-1c7eed80]{margin:0 30px 60px;font-size:14px;color:#777}.song[data-v-1c7eed80]{padding:0 30px 0 20px;margin:20px 0}.song h3[data-v-1c7eed80]{color:#444;font-size:15px}.song h3[data-v-1c7eed80],.song p[data-v-1c7eed80]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.song p[data-v-1c7eed80]{color:#777;font-size:14px} -------------------------------------------------------------------------------- /dist/css/chunk-76fd7d5c.cb30ee38.css: -------------------------------------------------------------------------------- 1 | .loading[data-v-c4ae9964]{text-align:center}.loading img[data-v-c4ae9964]{width:24px;height:24px}.desc[data-v-c4ae9964]{margin-top:10px;margin-right:-8px;font-size:14px;color:#666}.loading-container[data-v-d8e87d20]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.singer-item[data-v-d8e87d20]{position:relative;height:72px}.media[data-v-d8e87d20]{position:absolute;bottom:0;left:0;width:80%;height:72px;line-height:72px;padding-left:20px}.media img[data-v-d8e87d20]{display:inline-block;width:50px;height:50px;margin-right:15px;border-radius:50%}.media span[data-v-d8e87d20]{font-size:14px} -------------------------------------------------------------------------------- /dist/css/chunk-ef101f3a.6e54fed6.css: -------------------------------------------------------------------------------- 1 | .loading[data-v-c4ae9964]{text-align:center}.loading img[data-v-c4ae9964]{width:24px;height:24px}.desc[data-v-c4ae9964]{margin-top:10px;margin-right:-8px;font-size:14px;color:#666}.loading-container[data-v-a3483584]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.toplists[data-v-a3483584]{width:100%;padding:0 20px;background-color:#f4f4f4;overflow:hidden;margin-bottom:80px}.toplists li[data-v-a3483584]{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100px;width:100%;margin-top:20px;background-color:#fff}.toplists img[data-v-a3483584]{width:100px;height:100px}.toplists .media-text[data-v-a3483584]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around;height:80px;width:60%;margin-left:20px}.toplists .media-text .songname[data-v-a3483584]{color:#000}.toplists .media-text p[data-v-a3483584]{font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;color:#888}.arrow[data-v-a3483584]{position:absolute;right:12px;top:47.5px;width:6px;height:6px;-webkit-box-sizing:content-box;box-sizing:content-box;border-right:1px solid #b2b2b2;border-bottom:1px solid #b2b2b2;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)} -------------------------------------------------------------------------------- /dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/dist/favicon.ico -------------------------------------------------------------------------------- /dist/fonts/iconfont.ee5a40ec.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/dist/fonts/iconfont.ee5a40ec.eot -------------------------------------------------------------------------------- /dist/fonts/iconfont.f302356e.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/dist/fonts/iconfont.f302356e.ttf -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | vue-music
-------------------------------------------------------------------------------- /dist/js/chunk-0497c285.5a92c14f.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0497c285"],{"02f4":function(t,n,e){var i=e("4588"),a=e("be13");t.exports=function(t){return function(n,e){var s,r,c=String(a(n)),o=i(e),l=c.length;return o<0||o>=l?t?"":void 0:(s=c.charCodeAt(o),s<55296||s>56319||o+1===l||(r=c.charCodeAt(o+1))<56320||r>57343?t?c.charAt(o):s:t?c.slice(o,o+2):r-56320+(s-55296<<10)+65536)}}},"0390":function(t,n,e){"use strict";var i=e("02f4")(!0);t.exports=function(t,n,e){return n+(e?i(t,n).length:1)}},"0bfb":function(t,n,e){"use strict";var i=e("cb7c");t.exports=function(){var t=i(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},"153d":function(t,n,e){},"214f":function(t,n,e){"use strict";e("b0c5");var i=e("2aba"),a=e("32e9"),s=e("79e5"),r=e("be13"),c=e("2b4c"),o=e("520a"),l=c("species"),u=!s(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),g=function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var e="ab".split(t);return 2===e.length&&"a"===e[0]&&"b"===e[1]}();t.exports=function(t,n,e){var A=c(t),m=!s(function(){var n={};return n[A]=function(){return 7},7!=""[t](n)}),d=m?!s(function(){var n=!1,e=/a/;return e.exec=function(){return n=!0,null},"split"===t&&(e.constructor={},e.constructor[l]=function(){return e}),e[A](""),!n}):void 0;if(!m||!d||"replace"===t&&!u||"split"===t&&!g){var f=/./[A],p=e(r,A,""[t],function(t,n,e,i,a){return n.exec===o?m&&!a?{done:!0,value:f.call(n,e,i)}:{done:!0,value:t.call(e,n,i)}:{done:!1}}),h=p[0],v=p[1];i(String.prototype,t,h),a(RegExp.prototype,A,2==n?function(t,n){return v.call(t,this,n)}:function(t){return v.call(t,this)})}}},"36ad":function(t,n,e){"use strict";var i=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"page-header",style:t.imgStyle},[e("i",{staticClass:"iconfont icon-zuojiantou",on:{click:t.goback}}),e("h3",{staticClass:"title",domProps:{innerHTML:t._s(t.title)}})])},a=[],s={props:{title:{type:String,default:""},imgUrl:{type:String,default:""}},computed:{imgStyle:function(){return"backgroundImage:url(".concat(this.imgUrl,")")}},methods:{goback:function(){this.$router.go(-1)}}},r=s,c=(e("4b85"),e("2877")),o=Object(c["a"])(r,i,a,!1,null,"c0472a44",null);n["a"]=o.exports},"3a5e":function(t,n,e){"use strict";var i=function(){var t=this,n=t.$createElement,i=t._self._c||n;return i("div",{staticClass:"loading"},[i("img",{attrs:{src:e("f8b2")}}),i("p",{staticClass:"desc"},[t._v(t._s(t.title))])])},a=[],s={props:{title:{type:String,default:"正在载入..."}}},r=s,c=(e("7a57"),e("2877")),o=Object(c["a"])(r,i,a,!1,null,"c4ae9964",null);n["a"]=o.exports},4016:function(t,n,e){},"4b85":function(t,n,e){"use strict";var i=e("153d"),a=e.n(i);a.a},"520a":function(t,n,e){"use strict";var i=e("0bfb"),a=RegExp.prototype.exec,s=String.prototype.replace,r=a,c="lastIndex",o=function(){var t=/a/,n=/b*/g;return a.call(t,"a"),a.call(n,"a"),0!==t[c]||0!==n[c]}(),l=void 0!==/()??/.exec("")[1],u=o||l;u&&(r=function(t){var n,e,r,u,g=this;return l&&(e=new RegExp("^"+g.source+"$(?!\\s)",i.call(g))),o&&(n=g[c]),r=a.call(g,t),o&&r&&(g[c]=g.global?r.index+r[0].length:n),l&&r&&r.length>1&&s.call(r[0],e,function(){for(u=1;u]*>)/g,m=/\$([$&`']|\d\d?)/g,d=function(t){return void 0===t?t:String(t)};e("214f")("replace",2,function(t,n,e,f){return[function(i,a){var s=t(this),r=void 0==i?void 0:i[n];return void 0!==r?r.call(i,s,a):e.call(String(s),i,a)},function(t,n){var a=f(e,t,this,n);if(a.done)return a.value;var g=i(t),A=String(this),m="function"===typeof n;m||(n=String(n));var h=g.global;if(h){var v=g.unicode;g.lastIndex=0}var b=[];while(1){var C=o(g,A);if(null===C)break;if(b.push(C),!h)break;var y=String(C[0]);""===y&&(g.lastIndex=c(A,s(g.lastIndex),v))}for(var w="",S=0,j=0;j=S&&(w+=A.slice(S,R)+O,S=R+x.length)}return w+A.slice(S)}];function p(t,n,i,s,r,c){var o=i+t.length,l=s.length,u=m;return void 0!==r&&(r=a(r),u=A),e.call(c,u,function(e,a){var c;switch(a.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,i);case"'":return n.slice(o);case"<":c=r[a.slice(1,-1)];break;default:var u=+a;if(0===u)return e;if(u>l){var A=g(u/10);return 0===A?e:A<=l?void 0===s[A-1]?a.charAt(1):s[A-1]+a.charAt(1):e}c=s[u-1]}return void 0===c?"":c})}})},ac6a:function(t,n,e){for(var i=e("cadf"),a=e("0d58"),s=e("2aba"),r=e("7726"),c=e("32e9"),o=e("84f2"),l=e("2b4c"),u=l("iterator"),g=l("toStringTag"),A=o.Array,m={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=a(m),f=0;f"),a={img:"https://y.gtimg.cn/music/photo_new/T002R150x150M000".concat(e.mid,".jpg?max_age=2592000"),singerimg:"https://y.gtimg.cn/music/photo_new/T001R150x150M000".concat(e.singermid,".jpg?max_age=2592000"),publishData:e.aDate,desc:i,name:e.name,singername:e.singername,singermid:e.singermid,otherAlbums:e.otherAlbums,songlist:[]};e.list.forEach(function(t){a.songlist.push(Object(l["a"])(t))}),t.albuminfo=r()({},a)})},goTo:function(t,n){var e="/".concat(t,"/").concat(n);this.$router.push(e)}}},d=m,f=(e("ed9c"),e("2877")),p=Object(f["a"])(d,i,a,!1,null,"38456438",null);n["default"]=p.exports},f8b2:function(t,n){t.exports="data:image/gif;base64,R0lGODlhZABkAKIEAN7e3rq6uv///5mZmQAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpBRjA4RUZDMDI3MjA2ODExODA4M0Y1OTQyMzVDRDM3MyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCMzE0Rjk3NDdDRTgxMUUzOUJCRjk0NjAxMUE1NzRBMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCMzE0Rjk3MzdDRTgxMUUzOUJCRjk0NjAxMUE1NzRBMCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDVBMTZDQjczOTIwNjgxMTgwODNGNTk0MjM1Q0QzNzMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QUYwOEVGQzAyNzIwNjgxMTgwODNGNTk0MjM1Q0QzNzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+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"}}]); 2 | //# sourceMappingURL=chunk-0497c285.5a92c14f.js.map -------------------------------------------------------------------------------- /dist/js/chunk-16c802da.0af9827c.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-16c802da"],{"2d3b":function(t,e,i){"use strict";i.r(e);var s=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"serach"},[i("div",{ref:"searchBar",staticClass:"search-bar"},[i("div",{staticClass:"input-warp"},[i("i",{staticClass:"iconfont icon-sousuo"}),i("input",{directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],attrs:{type:"text",placeholder:"搜索歌曲、歌单、专辑"},domProps:{value:t.value},on:{focus:function(e){return t.toggleShow(!0)},input:function(e){e.target.composing||(t.value=e.target.value)}}}),i("i",{directives:[{name:"show",rawName:"v-show",value:t.value,expression:"value"}],staticClass:"iconfont icon-chahao",on:{click:t.deleteValue}})]),i("div",{directives:[{name:"show",rawName:"v-show",value:t.isShow,expression:"isShow"}],staticClass:"cancel-btn",on:{click:function(e){return t.toggleShow(!1)}}},[t._v("取消")])]),i("div",{directives:[{name:"show",rawName:"v-show",value:!t.isShow,expression:"!isShow"}],staticClass:"hot-keys"},[i("h3",[t._v("热门搜索")]),i("ul",t._l(t.hotlist,function(e,s){return i("li",{key:s,on:{click:function(i){return t.selectHotKey(e.k)}}},[i("span",[t._v(t._s(e.k))])])}),0)]),i("div",{directives:[{name:"show",rawName:"v-show",value:t.isShow,expression:"isShow"}],staticClass:"focus-wrapper"},[i("div",{directives:[{name:"show",rawName:"v-show",value:!t.value,expression:"!value"}],staticClass:"search-history"},[i("ul",[t._l(t.searchHistory,function(e,s){return i("li",{key:s,staticClass:"history",on:{click:function(i){t.value=e}}},[i("i",{staticClass:"iconfont icon-lishiyouxibitongjiweijihuo"}),i("span",[t._v(t._s(e))]),i("span",{staticClass:"cha",on:{click:function(e){return e.stopPropagation(),t.removeItem({key:"searchHistory",index:s})}}},[t._v("×")])])}),i("li",{directives:[{name:"show",rawName:"v-show",value:t.searchHistory.length,expression:"searchHistory.length"}],staticClass:"clearlist"},[i("i",{staticClass:"iconfont icon-lajitong1"}),t._v(" \n\t\t\t\t\t"),i("span",{on:{click:function(e){return t.clearList("searchHistory")}}},[t._v("清空搜索记录")])])],2)]),i("div",{directives:[{name:"show",rawName:"v-show",value:t.value,expression:"value"}],ref:"suggestion",staticClass:"search-suggestion"},[i("mt-loadmore",{ref:"loadmore",attrs:{"bottom-method":t.loadBottom,"bottom-all-loaded":t.allLoaded},on:{"bottom-status-change":t.test}},[i("ul",[t._l(t.suggestionList,function(e,s){return i("li",{key:s,on:{click:function(i){return t.addSearchHistory(e,e.type)}}},[i("div",{staticClass:"media-icon"},[i("i",{staticClass:"iconfont icon-yinle1"})]),i("div",{staticClass:"media-text"},[i("h3",{domProps:{innerHTML:t._s(t.getContent(e,"h3"))}}),i("p",{domProps:{innerHTML:t._s(t.getContent(e,"p"))}})])])}),i("li",{directives:[{name:"show",rawName:"v-show",value:t.allLoaded&&t.suggestionList.length,expression:"allLoaded&&suggestionList.length"}],staticClass:"allLoaded"},[t._v("已加载全部")])],2)])],1)])])},n=[],a=(i("20d6"),i("5176")),o=i.n(a),r=(i("ac6a"),i("cebc")),c=i("582e");function l(){var t="https://c.y.qq.com/splcloud/fcgi-bin/gethotkey.fcg",e={uin:0,format:"jsonp",inCharset:"utf-8",outCharset:"utf-8",notice:0,platform:"h5",needNewCode:1};return Object(c["a"])(t,e,{param:"jsonpCallback"})}function u(t,e){var i="https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=30&w=".concat(t),s={uin:0,format:"jsonp",inCharset:"utf-8",outCharset:"utf-8",notice:0,platform:"h5",needNewCode:1,w:t,zhidaqu:1,catZhida:1,t:0,flag:1,ie:"utf-8",sem:1,aggr:0,perpage:20,n:20,p:e,remoteplace:"txt.mqq.all"};return Object(c["a"])(i,s,{param:"jsonpCallback"})}var h=i("8dd1"),d=i("2f62"),g={data:function(){return{hotlist:[],value:"",isShow:!1,suggestionList:[],pageNum:1,allLoaded:!1}},created:function(){this._getHotKey()},mounted:function(){this.getHeight()},computed:Object(r["a"])({},Object(d["e"])(["searchHistory","playlist","sequencelist","currentIndex","fullScreen"]),Object(d["c"])(["currentSong"])),watch:{value:function(){var t=this;this.pageNum=1,u(this.value,1).then(function(e){var i=e.data;console.log(i),t.suggestionList=[],i.song.list.forEach(function(e){var i={type:0};o()(i,Object(h["a"])(e)),t.suggestionList.push(i)})})}},methods:Object(r["a"])({},Object(d["d"])(["addItem","removeItem","clearList","setFullScreenState","addItemPosition","setCurrentIndex","setPlayingState"]),Object(d["b"])(["selectPlay"]),{_getHotKey:function(){var t=this;l().then(function(e){for(var i=0;i<10;i++)t.hotlist.push(e.data.hotkey[i])})},deleteValue:function(){this.value=""},toggleShow:function(t){this.isShow=t},loadBottom:function(){var t=this;u(this.value,this.pageNum++).then(function(e){var i=e.data;if(!i.song.list.length)return t.allLoaded=!0,void(t.$refs.suggestion.style.paddingBottom="80px");i.song.list.forEach(function(e){var i={type:0};o()(i,Object(h["a"])(e)),t.suggestionList.push(i)})})},getHeight:function(){var t=window.innerHeight,e=this.$refs.searchBar.clientHeight,i=t-e-84+"px";this.$refs.suggestion.style.height=i},getContent:function(t,e){switch(t.type){case 3:return"h3"===e?t.albumname:t.singername;default:return"h3"===e?t.songname:t.singername}},addSearchHistory:function(t,e){var i=this,s=this.searchHistory.findIndex(function(t){return t===i.value});switch(-1===s&&this.addItem({key:"searchHistory",song:this.value}),e){case 2:this.$router.push("/singerlist/singer/"+t.singermid);break;case 3:this.$router.push("/album/"+t.albummid);break;default:if(this.sequencelist.length){var n=this.playlist.findIndex(function(t){return t.id===i.currentSong.id});this.addItemPosition({key:"playlist",song:t,index:n+1}),this.setCurrentIndex(n+1),this.setPlayingState(!0),this.setFullScreenState(!0)}else{var a=[];a.push(t),this.selectPlay({list:a,index:0}),this.setFullScreenState(!0)}break}},selectHotKey:function(t){this.value=t,this.isShow=!0}})},m=g,f=(i("bb2a"),i("2877")),v=Object(f["a"])(m,s,n,!1,null,"bece5800",null);e["default"]=v.exports},"7afd":function(t,e,i){},"7f7f":function(t,e,i){var s=i("86cc").f,n=Function.prototype,a=/^\s*function ([^ (]*)/,o="name";o in n||i("9e1e")&&s(n,o,{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(t){return""}}})},"8dd1":function(t,e,i){"use strict";i("7f7f"),i("ac6a");function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}i.d(e,"a",function(){return a});var n=function t(e){var i=e.id,n=e.mid,a=e.singername,o=e.songname,r=e.albumname,c=e.duration,l=e.img,u=e.url;s(this,t),this.id=i,this.mid=n,this.singername=a,this.songname=o,this.albumname=r,this.duration=c,this.img=l,this.url=u};function a(t){return new n({id:t.songid,mid:t.songmid,singername:o(t.singer),songname:t.songname,albumname:t.albumname,duration:t.interval,img:"https://y.gtimg.cn/music/photo_new/T002R300x300M000".concat(t.albummid,".jpg?max_age=2592000"),url:"http://ws.stream.qqmusic.qq.com/C100".concat(t.songmid,".m4a?fromtag=0&guid=126548448")})}function o(t){var e=[];return t?(t.forEach(function(t){e.push(t.name)}),e.join("/")):""}},ac6a:function(t,e,i){for(var s=i("cadf"),n=i("0d58"),a=i("2aba"),o=i("7726"),r=i("32e9"),c=i("84f2"),l=i("2b4c"),u=l("iterator"),h=l("toStringTag"),d=c.Array,g={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},m=n(g),f=0;f=230?(t.classList.add("fiexd-top"),i.style.marginTop="320px"):(t.classList.remove("fiexd-top"),i.style.marginTop=0),this.isAddFilter=e>0},message:function(){Object(u["MessageBox"])({title:"提示",message:"mv还没有开发呀!"})}}}),A=m,g=(e("ebef"),e("2877")),d=Object(g["a"])(A,n,s,!1,null,"10c518da",null);i["default"]=d.exports},"7f7f":function(t,i,e){var n=e("86cc").f,s=Function.prototype,a=/^\s*function ([^ (]*)/,c="name";c in s||e("9e1e")&&n(s,c,{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(t){return""}}})},"8dd1":function(t,i,e){"use strict";e("7f7f"),e("ac6a");function n(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}e.d(i,"a",function(){return a});var s=function t(i){var e=i.id,s=i.mid,a=i.singername,c=i.songname,o=i.albumname,l=i.duration,r=i.img,u=i.url;n(this,t),this.id=e,this.mid=s,this.singername=a,this.songname=c,this.albumname=o,this.duration=l,this.img=r,this.url=u};function a(t){return new s({id:t.songid,mid:t.songmid,singername:c(t.singer),songname:t.songname,albumname:t.albumname,duration:t.interval,img:"https://y.gtimg.cn/music/photo_new/T002R300x300M000".concat(t.albummid,".jpg?max_age=2592000"),url:"http://ws.stream.qqmusic.qq.com/C100".concat(t.songmid,".m4a?fromtag=0&guid=126548448")})}function c(t){var i=[];return t?(t.forEach(function(t){i.push(t.name)}),i.join("/")):""}},ac6a:function(t,i,e){for(var n=e("cadf"),s=e("0d58"),a=e("2aba"),c=e("7726"),o=e("32e9"),l=e("84f2"),r=e("2b4c"),u=r("iterator"),m=r("toStringTag"),A=l.Array,g={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=s(g),p=0;p=7,expression:"mylikeSongs.length>=7"}],staticClass:"clearlist",on:{click:function(e){return t.clear("mylikeSongs")}}},[s("i",{staticClass:"iconfont icon-lajitong1"}),t._v(" 清空列表\n\t\t\t")])]),s("div",{directives:[{name:"show",rawName:"v-show",value:"playHistory"===t.selected,expression:"selected==='playHistory'"}],staticClass:"container-item"},[s("div",{directives:[{name:"show",rawName:"v-show",value:!t.playHistory.length,expression:"!playHistory.length"}],staticClass:"empty"},[s("i",{staticClass:"iconfont icon-yinyue"}),s("p",[t._v("没有播放记录")]),s("p",[t._v("这里会自动记录您最近听过的200首歌曲")])]),s("div",{directives:[{name:"show",rawName:"v-show",value:t.playHistory.length,expression:"playHistory.length"}],staticClass:"play-btn",on:{click:function(e){return t.randomPlay(t.playHistory,"playHistory")}}},[s("i",{staticClass:"iconfont icon-play_icon"}),s("span",[t._v("随机播放全部")])]),s("ul",{staticClass:"list"},t._l(t.playHistory,function(e,i){return s("li",{key:i,staticClass:"item",on:{click:function(e){return t.selectItem(t.playHistory,i,"playHistory")}}},[s("h3",{class:t.active(e,"playHistory"),domProps:{innerHTML:t._s(e.songname)}}),s("p",{class:t.active(e,"playHistory"),domProps:{innerHTML:t._s(e.singername+"·"+e.albumname)}}),s("span",{on:{click:function(s){return s.stopPropagation(),t._removeItem("playHistory",e,i)}}},[t._v("×")])])}),0),s("div",{directives:[{name:"show",rawName:"v-show",value:t.playHistory.length>=7,expression:"playHistory.length>=7"}],staticClass:"clearlist",on:{click:function(e){return t.clear("playHistory")}}},[s("i",{staticClass:"iconfont icon-lajitong1"}),t._v(" 清空列表\n\t\t\t")])])])])},n=[],a=(s("20d6"),s("cebc")),o=(s("cadf"),s("551c"),s("f751"),s("097d"),s("2f62")),l=s("76a0"),c={data:function(){return{selected:"mylikeSongs"}},computed:Object(a["a"])({},Object(o["e"])(["mylikeSongs","playHistory","playlist","mode","other"]),Object(o["c"])(["currentSong"])),methods:Object(a["a"])({},Object(o["d"])(["clearList","removeItem","setModeState","setPlayingState","setCurrentIndex","setPlaylist","setOther"]),Object(o["b"])(["selectPlay"]),{back:function(){this.$router.go(-1)},switchItem:function(t){this.selected=t},clear:function(t){var e=this;l["MessageBox"].confirm("确定清空列表吗?").then(function(){e.clearList(t),t===e.other.user&&e.setPlayingState(!1)},function(){})},selectItem:function(t,e,s){this.setOther({user:s}),this.selectPlay({list:t,index:e})},randomPlay:function(t,e){this.setOther({user:e});var s=Math.floor(Math.random()*t.length);this.setModeState(2),this.selectPlay({list:t,index:s})},active:function(t,e){if(t.id===this.currentSong.id&&e===this.other.user)return"play-song"},_removeItem:function(t,e,s){if(this.setPlayingState(!0),t==this.other.user){var i=this.currentSong;this.removeItem({key:t,index:s}),this.setPlaylist(this[t]),e.id!=i.id&&this.resetCurrentIndex(this.playlist,i),this[t].length||this.setPlayingState(!1)}else this.removeItem({key:t,index:s})},resetCurrentIndex:function(t,e){var s=t.findIndex(function(t){return t.id===e.id});this.setCurrentIndex(s)}})},r=c,y=(s("c2d4"),s("2877")),m=Object(y["a"])(r,i,n,!1,null,"2d093c58",null);e["default"]=m.exports},9714:function(t,e,s){},c2d4:function(t,e,s){"use strict";var i=s("9714"),n=s.n(i);n.a}}]); 2 | //# sourceMappingURL=chunk-2118b4ab.2eeabadc.js.map -------------------------------------------------------------------------------- /dist/js/chunk-4f17f3a5.86bbe3eb.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-4f17f3a5"],{"36b3":function(t,i,e){"use strict";e.d(i,"a",function(){return n});var a=e("582e");function n(){var t="https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg",i={format:"json",inCharset:"utf-8",outCharset:"utf-8",notice:0,platform:"h5",needNewCode:1};return Object(a["a"])(t,i,{param:"jsonpCallback"})}},"70b9":function(t,i,e){},7282:function(t,i,e){"use strict";var a=e("70b9"),n=e.n(a);n.a},"7f7f":function(t,i,e){var a=e("86cc").f,n=Function.prototype,s=/^\s*function ([^ (]*)/,r="name";r in n||e("9e1e")&&a(n,r,{configurable:!0,get:function(){try{return(""+this).match(s)[1]}catch(t){return""}}})},"8dd1":function(t,i,e){"use strict";e("7f7f"),e("ac6a");function a(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}e.d(i,"a",function(){return s});var n=function t(i){var e=i.id,n=i.mid,s=i.singername,r=i.songname,o=i.albumname,c=i.duration,l=i.img,u=i.url;a(this,t),this.id=e,this.mid=n,this.singername=s,this.songname=r,this.albumname=o,this.duration=c,this.img=l,this.url=u};function s(t){return new n({id:t.songid,mid:t.songmid,singername:r(t.singer),songname:t.songname,albumname:t.albumname,duration:t.interval,img:"https://y.gtimg.cn/music/photo_new/T002R300x300M000".concat(t.albummid,".jpg?max_age=2592000"),url:"http://ws.stream.qqmusic.qq.com/C100".concat(t.songmid,".m4a?fromtag=0&guid=126548448")})}function r(t){var i=[];return t?(t.forEach(function(t){i.push(t.name)}),i.join("/")):""}},ac6a:function(t,i,e){for(var a=e("cadf"),n=e("0d58"),s=e("2aba"),r=e("7726"),o=e("32e9"),c=e("84f2"),l=e("2b4c"),u=l("iterator"),d=l("toStringTag"),m=c.Array,f={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},p=n(f),g=0;g=A?t?"":void 0:(c=o.charCodeAt(s),c<55296||c>56319||s+1===A||(a=o.charCodeAt(s+1))<56320||a>57343?t?o.charAt(s):c:t?o.slice(s,s+2):a-56320+(c-55296<<10)+65536)}}},"0390":function(t,e,n){"use strict";var i=n("02f4")(!0);t.exports=function(t,e,n){return e+(n?i(t,e).length:1)}},"0bfb":function(t,e,n){"use strict";var i=n("cb7c");t.exports=function(){var t=i(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},"214f":function(t,e,n){"use strict";n("b0c5");var i=n("2aba"),r=n("32e9"),c=n("79e5"),a=n("be13"),o=n("2b4c"),s=n("520a"),A=o("species"),u=!c(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();t.exports=function(t,e,n){var g=o(t),p=!c(function(){var e={};return e[g]=function(){return 7},7!=""[t](e)}),f=p?!c(function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},"split"===t&&(n.constructor={},n.constructor[A]=function(){return n}),n[g](""),!e}):void 0;if(!p||!f||"replace"===t&&!u||"split"===t&&!l){var d=/./[g],h=n(a,g,""[t],function(t,e,n,i,r){return e.exec===s?p&&!r?{done:!0,value:d.call(e,n,i)}:{done:!0,value:t.call(n,e,i)}:{done:!1}}),m=h[0],v=h[1];i(String.prototype,t,m),r(RegExp.prototype,g,2==e?function(t,e){return v.call(t,this,e)}:function(t){return v.call(t,this)})}}},"2f21":function(t,e,n){"use strict";var i=n("79e5");t.exports=function(t,e){return!!t&&i(function(){e?t.call(null,function(){},1):t.call(null)})}},"3a5e":function(t,e,n){"use strict";var i=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"loading"},[i("img",{attrs:{src:n("f8b2")}}),i("p",{staticClass:"desc"},[t._v(t._s(t.title))])])},r=[],c={props:{title:{type:String,default:"正在载入..."}}},a=c,o=(n("7a57"),n("2877")),s=Object(o["a"])(a,i,r,!1,null,"c4ae9964",null);e["a"]=s.exports},4917:function(t,e,n){"use strict";var i=n("cb7c"),r=n("9def"),c=n("0390"),a=n("5f1b");n("214f")("match",1,function(t,e,n,o){return[function(n){var i=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=o(n,t,this);if(e.done)return e.value;var s=i(t),A=String(this);if(!s.global)return a(s,A);var u=s.unicode;s.lastIndex=0;var l,g=[],p=0;while(null!==(l=a(s,A))){var f=String(l[0]);g[p]=f,""===f&&(s.lastIndex=c(A,r(s.lastIndex),u)),p++}return 0===p?null:g}]})},"520a":function(t,e,n){"use strict";var i=n("0bfb"),r=RegExp.prototype.exec,c=String.prototype.replace,a=r,o="lastIndex",s=function(){var t=/a/,e=/b*/g;return r.call(t,"a"),r.call(e,"a"),0!==t[o]||0!==e[o]}(),A=void 0!==/()??/.exec("")[1],u=s||A;u&&(a=function(t){var e,n,a,u,l=this;return A&&(n=new RegExp("^"+l.source+"$(?!\\s)",i.call(l))),s&&(e=l[o]),a=r.call(l,t),s&&a&&(l[o]=l.global?a.index+a[0].length:e),A&&a&&a.length>1&&c.call(a[0],n,function(){for(u=1;u 2 | 3 | 4 | 5 | 6 | 7 | 8 | vue-music 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 26 | 27 | 28 | 43 | -------------------------------------------------------------------------------- /src/api/getAlbumData.js: -------------------------------------------------------------------------------- 1 | import jsonp from '@/assets/js/jsonp.js' 2 | 3 | export default function getAlbumData(mid){ 4 | const url='https://c.y.qq.com/v8/fcg-bin/fcg_v8_album_info_cp.fcg' 5 | 6 | let data={ 7 | albummid:mid, 8 | uin: 0, 9 | format: 'json', 10 | inCharset: 'utf-8', 11 | outCharset: 'utf-8', 12 | notice: 0, 13 | platform: 'h5', 14 | needNewCode: 1, 15 | } 16 | return jsonp(url,data,{param:'jsonpCallback'}) 17 | } -------------------------------------------------------------------------------- /src/api/getHotKey.js: -------------------------------------------------------------------------------- 1 | import jsonp from '@/assets/js/jsonp' 2 | 3 | export function getHotKey(){ 4 | const url = 'https://c.y.qq.com/splcloud/fcgi-bin/gethotkey.fcg' 5 | const data = { 6 | uin: 0, 7 | format: 'jsonp', 8 | inCharset: 'utf-8', 9 | outCharset: 'utf-8', 10 | notice: 0, 11 | platform: 'h5', 12 | needNewCode: 1, 13 | } 14 | return jsonp(url,data,{param:'jsonpCallback'}) 15 | } 16 | 17 | export function getSuggestion(value,page){ 18 | const url = `https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=30&w=${value}` 19 | const data = { 20 | uin: 0, 21 | format: 'jsonp', 22 | inCharset: 'utf-8', 23 | outCharset: 'utf-8', 24 | notice: 0, 25 | platform: 'h5', 26 | needNewCode: 1, 27 | w: value, 28 | zhidaqu: 1, 29 | catZhida: 1, 30 | t: 0, 31 | flag: 1, 32 | ie: 'utf-8', 33 | sem: 1, 34 | aggr: 0, 35 | perpage: 20, 36 | n: 20, 37 | p: page, 38 | remoteplace: 'txt.mqq.all', 39 | } 40 | return jsonp(url,data,{param:'jsonpCallback'}) 41 | } -------------------------------------------------------------------------------- /src/api/getRecommendData.js: -------------------------------------------------------------------------------- 1 | import jsonp from '@/assets/js/jsonp.js' 2 | 3 | export function getRecommendData(){ 4 | const url="https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg"; 5 | let data={ 6 | format: "json", 7 | inCharset: "utf-8", 8 | outCharset: "utf-8", 9 | notice: 0, 10 | platform: "h5", 11 | needNewCode: 1, 12 | } 13 | return jsonp(url,data,{param:"jsonpCallback"}) 14 | } 15 | 16 | export function getHotSongSheet(id){ 17 | const url = "https://ustbhuangyi.com/music/api/getCdInfo" 18 | let data = { 19 | g_tk: 1928093487, 20 | inCharset: 'utf-8', 21 | outCharset: 'utf-8', 22 | notice: 0, 23 | format: 'json', 24 | disstid: 4024171742, 25 | type: 1, 26 | json: 1, 27 | utf8: 1, 28 | onlysong: 0, 29 | platform: 'yqq', 30 | hostUin: 0, 31 | needNewCode: 0, 32 | } 33 | return jsonp(url,data,{ 34 | param:"jsonpCallback", 35 | prefix: "playlistinfoCallback" 36 | }) 37 | } -------------------------------------------------------------------------------- /src/api/getSingerlistData.js: -------------------------------------------------------------------------------- 1 | import jsonp from '@/assets/js/jsonp.js' 2 | 3 | export default function getSingerlistData(){ 4 | const url="https://szc.y.qq.com/v8/fcg-bin/v8.fcg"; 5 | let data={ 6 | channel:"singer", 7 | page:"list", 8 | key: "all_all_all", //获取所以排行歌手信息,all_all_A获取A字母开头的歌手信息 9 | pagesize: 100, //获取100条数据 10 | pagenum: 1, 11 | // g_tk: 5381, 12 | loginUin: 0, 13 | hostUin: 0, 14 | format: "jsonp", 15 | inCharset: "utf8", 16 | outCharset: "utf-8", 17 | notice: 0, 18 | platform: "yqq", 19 | needNewCode: 0, 20 | } 21 | return jsonp(url,data,{param:"jsonpCallback"}) 22 | } 23 | 24 | export function getSingerData(id){ 25 | const url="https://c.y.qq.com/v8/fcg-bin/fcg_v8_singer_track_cp.fcg" 26 | 27 | let data={ 28 | singermid: id, 29 | format: "jsonp", 30 | inCharset: "utf-8", 31 | outCharset: "utf-8", 32 | notice: 0, 33 | platform: "h5page", 34 | needNewCode: 1, 35 | order: "listen", 36 | from: "h5", 37 | num: 30, //获取歌曲数量 38 | begin: 0 39 | } 40 | return jsonp(url,data,{param:"jsonpCallback"}); 41 | } -------------------------------------------------------------------------------- /src/api/getToplistsData.js: -------------------------------------------------------------------------------- 1 | import jsonp from '@/assets/js/jsonp.js' 2 | 3 | export default function getToplistsData(){ 4 | const url="https://c.y.qq.com/v8/fcg-bin/fcg_myqq_toplist.fcg" 5 | 6 | let data={ 7 | format: "jsonp", 8 | inCharset: "utf-8", 9 | outCharset: "utf-8", 10 | notice: 0, 11 | platform: "h5", 12 | needNewCode: 1, 13 | } 14 | return jsonp(url,data,{param:"jsonpCallback"}); 15 | } 16 | 17 | export function getToplist(id){ 18 | const url="https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg" 19 | 20 | let data={ 21 | uin: 0, 22 | format: 'jsonp', 23 | inCharset: 'utf-8', 24 | outCharset: 'utf-8', 25 | notice: 0, 26 | platform: 'h5', 27 | needNewCode: 1, 28 | tpl: 3, 29 | page: 'detail', 30 | type: 'top', 31 | topid: id, 32 | } 33 | return jsonp(url,data,{param:"jsonpCallback"}); 34 | } -------------------------------------------------------------------------------- /src/assets/css/my-mint.css: -------------------------------------------------------------------------------- 1 | .mint-tab-item-label{ 2 | font-size: 14px; 3 | } 4 | .mint-tab-item{ 5 | border-bottom: 3px solid #fff; 6 | } 7 | .mint-navbar .mint-tab-item.is-selected { 8 | border-bottom: 3px solid #31c27c; 9 | color: #31c27c; 10 | margin-bottom: -3px; 11 | } 12 | .mint-msgbox{ 13 | width: 296px; 14 | } 15 | .mint-msgbox-confirm{ 16 | color: #777; 17 | } -------------------------------------------------------------------------------- /src/assets/css/reset.css: -------------------------------------------------------------------------------- 1 | *{ 2 | box-sizing:border-box; 3 | } 4 | 5 | html,body{ 6 | width: 100%; 7 | min-height: 100%; 8 | touch-action: manipulation; /* IE11+ 禁止双击缩放,关于移动端300ms延迟:https://github.com/ftlabs/fastclick */ 9 | -ms-touch-action: manipulation /* IE10+ 禁止双击缩放 */ 10 | } 11 | body{ 12 | font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; 13 | overflow-y: initial !important; /* music-ui的自带样式会导致body出现滚动条,然后导致scrollBehavior无法获取window的滚动位置 */ 14 | } 15 | img{vertical-align: top;border: 0;} 16 | ul, li, ol{ 17 | list-style-type: none; 18 | } 19 | a, blockquote, body, button, code, dd, div, dl, dt, em, fieldset, form, h1, h2, h3, h4, h5, h6, html,iframe, img, input, label, li, object, ol, p, q, small, span, strong, table, tbody, td, th, tr, ul { 20 | margin: 0; 21 | padding: 0; 22 | border: 0; 23 | } 24 | h1, h2, h3, h4, h5, h6{ 25 | font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; 26 | } 27 | 28 | button, input, select, textarea { font-size: 100%; line-height:normal; } 29 | button, input, select, label{vertical-align:middle;} 30 | table{ border-collapse: collapse; border-spacing: 0; } 31 | input[type="button"],input[type="submit"],input[type="reset"]{cursor:pointer;} 32 | a{color: #333; outline: none; text-decoration: none;} 33 | a:focus{outline: none;} 34 | .clearfix:after {visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0;} 35 | .clearfix {zoom:1; } 36 | em{ 37 | font-style: normal; 38 | } -------------------------------------------------------------------------------- /src/assets/font/demo.css: -------------------------------------------------------------------------------- 1 | *{margin: 0;padding: 0;list-style: none;} 2 | /* 3 | KISSY CSS Reset 4 | 理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。 5 | 2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。 6 | 3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。 7 | 特色:1. 适应中文;2. 基于最新主流浏览器。 8 | 维护:玉伯, 正淳 9 | */ 10 | 11 | /** 清除内外边距 **/ 12 | body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */ 13 | dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ 14 | pre, /* text formatting elements 文本格式元素 */ 15 | form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */ 16 | th, td /* table elements 表格元素 */ { 17 | margin: 0; 18 | padding: 0; 19 | } 20 | 21 | /** 设置默认字体 **/ 22 | body, 23 | button, input, select, textarea /* for ie */ { 24 | font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif; 25 | } 26 | h1, h2, h3, h4, h5, h6 { font-size: 100%; } 27 | address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */ 28 | code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */ 29 | small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */ 30 | 31 | /** 重置列表元素 **/ 32 | ul, ol { list-style: none; } 33 | 34 | /** 重置文本格式元素 **/ 35 | a { text-decoration: none; } 36 | a:hover { text-decoration: underline; } 37 | 38 | 39 | /** 重置表单元素 **/ 40 | legend { color: #000; } /* for ie6 */ 41 | fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */ 42 | button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */ 43 | /* 注:optgroup 无法扶正 */ 44 | 45 | /** 重置表格元素 **/ 46 | table { border-collapse: collapse; border-spacing: 0; } 47 | 48 | /* 清除浮动 */ 49 | .ks-clear:after, .clear:after { 50 | content: '\20'; 51 | display: block; 52 | height: 0; 53 | clear: both; 54 | } 55 | .ks-clear, .clear { 56 | *zoom: 1; 57 | } 58 | 59 | .main { 60 | padding: 30px 100px; 61 | width: 960px; 62 | margin: 0 auto; 63 | } 64 | .main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;} 65 | 66 | .helps{margin-top:40px;} 67 | .helps pre{ 68 | padding:20px; 69 | margin:10px 0; 70 | border:solid 1px #e7e1cd; 71 | background-color: #fffdef; 72 | overflow: auto; 73 | } 74 | 75 | .icon_lists{ 76 | width: 100% !important; 77 | 78 | } 79 | 80 | .icon_lists li{ 81 | float:left; 82 | width: 100px; 83 | height:180px; 84 | text-align: center; 85 | list-style: none !important; 86 | } 87 | .icon_lists .icon{ 88 | font-size: 42px; 89 | line-height: 100px; 90 | margin: 10px 0; 91 | color:#333; 92 | -webkit-transition: font-size 0.25s ease-out 0s; 93 | -moz-transition: font-size 0.25s ease-out 0s; 94 | transition: font-size 0.25s ease-out 0s; 95 | 96 | } 97 | .icon_lists .icon:hover{ 98 | font-size: 100px; 99 | } 100 | 101 | 102 | 103 | .markdown { 104 | color: #666; 105 | font-size: 14px; 106 | line-height: 1.8; 107 | } 108 | 109 | .highlight { 110 | line-height: 1.5; 111 | } 112 | 113 | .markdown img { 114 | vertical-align: middle; 115 | max-width: 100%; 116 | } 117 | 118 | .markdown h1 { 119 | color: #404040; 120 | font-weight: 500; 121 | line-height: 40px; 122 | margin-bottom: 24px; 123 | } 124 | 125 | .markdown h2, 126 | .markdown h3, 127 | .markdown h4, 128 | .markdown h5, 129 | .markdown h6 { 130 | color: #404040; 131 | margin: 1.6em 0 0.6em 0; 132 | font-weight: 500; 133 | clear: both; 134 | } 135 | 136 | .markdown h1 { 137 | font-size: 28px; 138 | } 139 | 140 | .markdown h2 { 141 | font-size: 22px; 142 | } 143 | 144 | .markdown h3 { 145 | font-size: 16px; 146 | } 147 | 148 | .markdown h4 { 149 | font-size: 14px; 150 | } 151 | 152 | .markdown h5 { 153 | font-size: 12px; 154 | } 155 | 156 | .markdown h6 { 157 | font-size: 12px; 158 | } 159 | 160 | .markdown hr { 161 | height: 1px; 162 | border: 0; 163 | background: #e9e9e9; 164 | margin: 16px 0; 165 | clear: both; 166 | } 167 | 168 | .markdown p, 169 | .markdown pre { 170 | margin: 1em 0; 171 | } 172 | 173 | .markdown > p, 174 | .markdown > blockquote, 175 | .markdown > .highlight, 176 | .markdown > ol, 177 | .markdown > ul { 178 | width: 80%; 179 | } 180 | 181 | .markdown ul > li { 182 | list-style: circle; 183 | } 184 | 185 | .markdown > ul li, 186 | .markdown blockquote ul > li { 187 | margin-left: 20px; 188 | padding-left: 4px; 189 | } 190 | 191 | .markdown > ul li p, 192 | .markdown > ol li p { 193 | margin: 0.6em 0; 194 | } 195 | 196 | .markdown ol > li { 197 | list-style: decimal; 198 | } 199 | 200 | .markdown > ol li, 201 | .markdown blockquote ol > li { 202 | margin-left: 20px; 203 | padding-left: 4px; 204 | } 205 | 206 | .markdown code { 207 | margin: 0 3px; 208 | padding: 0 5px; 209 | background: #eee; 210 | border-radius: 3px; 211 | } 212 | 213 | .markdown pre { 214 | border-radius: 6px; 215 | background: #f7f7f7; 216 | padding: 20px; 217 | } 218 | 219 | .markdown pre code { 220 | border: none; 221 | background: #f7f7f7; 222 | margin: 0; 223 | } 224 | 225 | .markdown strong, 226 | .markdown b { 227 | font-weight: 600; 228 | } 229 | 230 | .markdown > table { 231 | border-collapse: collapse; 232 | border-spacing: 0px; 233 | empty-cells: show; 234 | border: 1px solid #e9e9e9; 235 | width: 95%; 236 | margin-bottom: 24px; 237 | } 238 | 239 | .markdown > table th { 240 | white-space: nowrap; 241 | color: #333; 242 | font-weight: 600; 243 | 244 | } 245 | 246 | .markdown > table th, 247 | .markdown > table td { 248 | border: 1px solid #e9e9e9; 249 | padding: 8px 16px; 250 | text-align: left; 251 | } 252 | 253 | .markdown > table th { 254 | background: #F7F7F7; 255 | } 256 | 257 | .markdown blockquote { 258 | font-size: 90%; 259 | color: #999; 260 | border-left: 4px solid #e9e9e9; 261 | padding-left: 0.8em; 262 | margin: 1em 0; 263 | font-style: italic; 264 | } 265 | 266 | .markdown blockquote p { 267 | margin: 0; 268 | } 269 | 270 | .markdown .anchor { 271 | opacity: 0; 272 | transition: opacity 0.3s ease; 273 | margin-left: 8px; 274 | } 275 | 276 | .markdown .waiting { 277 | color: #ccc; 278 | } 279 | 280 | .markdown h1:hover .anchor, 281 | .markdown h2:hover .anchor, 282 | .markdown h3:hover .anchor, 283 | .markdown h4:hover .anchor, 284 | .markdown h5:hover .anchor, 285 | .markdown h6:hover .anchor { 286 | opacity: 1; 287 | display: inline-block; 288 | } 289 | 290 | .markdown > br, 291 | .markdown > p > br { 292 | clear: both; 293 | } 294 | 295 | 296 | .hljs { 297 | display: block; 298 | background: white; 299 | padding: 0.5em; 300 | color: #333333; 301 | overflow-x: auto; 302 | } 303 | 304 | .hljs-comment, 305 | .hljs-meta { 306 | color: #969896; 307 | } 308 | 309 | .hljs-string, 310 | .hljs-variable, 311 | .hljs-template-variable, 312 | .hljs-strong, 313 | .hljs-emphasis, 314 | .hljs-quote { 315 | color: #df5000; 316 | } 317 | 318 | .hljs-keyword, 319 | .hljs-selector-tag, 320 | .hljs-type { 321 | color: #a71d5d; 322 | } 323 | 324 | .hljs-literal, 325 | .hljs-symbol, 326 | .hljs-bullet, 327 | .hljs-attribute { 328 | color: #0086b3; 329 | } 330 | 331 | .hljs-section, 332 | .hljs-name { 333 | color: #63a35c; 334 | } 335 | 336 | .hljs-tag { 337 | color: #333333; 338 | } 339 | 340 | .hljs-title, 341 | .hljs-attr, 342 | .hljs-selector-id, 343 | .hljs-selector-class, 344 | .hljs-selector-attr, 345 | .hljs-selector-pseudo { 346 | color: #795da3; 347 | } 348 | 349 | .hljs-addition { 350 | color: #55a532; 351 | background-color: #eaffea; 352 | } 353 | 354 | .hljs-deletion { 355 | color: #bd2c00; 356 | background-color: #ffecec; 357 | } 358 | 359 | .hljs-link { 360 | text-decoration: underline; 361 | } 362 | 363 | pre{ 364 | background: #fff; 365 | } 366 | 367 | 368 | 369 | 370 | 371 | -------------------------------------------------------------------------------- /src/assets/font/demo_fontclass.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/font/demo_fontclass.html -------------------------------------------------------------------------------- /src/assets/font/demo_symbol.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/font/demo_symbol.html -------------------------------------------------------------------------------- /src/assets/font/demo_unicode.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/font/demo_unicode.html -------------------------------------------------------------------------------- /src/assets/font/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('iconfont.eot?t=1526286445032'); /* IE9*/ 4 | src: url('iconfont.eot?t=1526286445032#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), 6 | url('iconfont.ttf?t=1526286445032') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('iconfont.svg?t=1526286445032#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-xihuan1:before { content: "\e63b"; } 19 | 20 | .icon-bofang:before { content: "\e6ad"; } 21 | 22 | .icon-chahao:before { content: "\e604"; } 23 | 24 | .icon-liebiao1:before { content: "\e62e"; } 25 | 26 | .icon-iconfontjiantou:before { content: "\e638"; } 27 | 28 | .icon-jiantouarrow483:before { content: "\e695"; } 29 | 30 | .icon-xihuan:before { content: "\e616"; } 31 | 32 | .icon-wode:before { content: "\e61d"; } 33 | 34 | .icon-shangyishou:before { content: "\e607"; } 35 | 36 | .icon-xiayishou:before { content: "\e62d"; } 37 | 38 | .icon-lajitong:before { content: "\e615"; } 39 | 40 | .icon-suijibofang:before { content: "\e622"; } 41 | 42 | .icon-liebiao11:before { content: "\e639"; } 43 | 44 | .icon-wode1:before { content: "\e636"; } 45 | 46 | .icon-lajitong1:before { content: "\e610"; } 47 | 48 | .icon-liebiao3:before { content: "\e640"; } 49 | 50 | .icon-jiarugedan:before { content: "\e642"; } 51 | 52 | .icon-yinyue:before { content: "\e680"; } 53 | 54 | .icon-yinle1:before { content: "\e67a"; } 55 | 56 | .icon-lishiyouxibitongjiweijihuo:before { content: "\e608"; } 57 | 58 | .icon-sousuo:before { content: "\e60a"; } 59 | 60 | .icon-play_icon:before { content: "\e667"; } 61 | 62 | .icon-xunhuanbofang:before { content: "\e66c"; } 63 | 64 | .icon-danquxunhuan:before { content: "\e66d"; } 65 | 66 | .icon-yinle:before { content: "\e6bb"; } 67 | 68 | .icon-jiantou:before { content: "\e62c"; } 69 | 70 | .icon-lajitong2:before { content: "\e736"; } 71 | 72 | .icon-liebiao4:before { content: "\e684"; } 73 | 74 | .icon-wode2:before { content: "\e60d"; } 75 | 76 | .icon-icon-:before { content: "\e643"; } 77 | 78 | .icon-wode3:before { content: "\e614"; } 79 | 80 | .icon-lvzhou_shanchu_lajitong:before { content: "\e629"; } 81 | 82 | .icon-zuojiantou:before { content: "\e79b"; } 83 | 84 | -------------------------------------------------------------------------------- /src/assets/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/font/iconfont.eot -------------------------------------------------------------------------------- /src/assets/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/font/iconfont.ttf -------------------------------------------------------------------------------- /src/assets/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/font/iconfont.woff -------------------------------------------------------------------------------- /src/assets/img/icon_list_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/img/icon_list_menu.png -------------------------------------------------------------------------------- /src/assets/img/lazy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/img/lazy.png -------------------------------------------------------------------------------- /src/assets/img/lazy1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/img/lazy1.jpg -------------------------------------------------------------------------------- /src/assets/img/list_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/img/list_sprite.png -------------------------------------------------------------------------------- /src/assets/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/img/loading.gif -------------------------------------------------------------------------------- /src/assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/img/logo.png -------------------------------------------------------------------------------- /src/assets/img/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/img/logo2.png -------------------------------------------------------------------------------- /src/assets/img/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timelessover/vue-QQmusic/2342175c2da68f97e80558f195183786fa3288b0/src/assets/img/player.png -------------------------------------------------------------------------------- /src/assets/js/jsonp.js: -------------------------------------------------------------------------------- 1 | import originJsonp from 'jsonp' 2 | 3 | //data对象转化为字符串后拼接到url后面去 4 | export default function jsonp(url,data,option){ 5 | url+=(url.indexOf('?')<0 ? '?': '&')+query(data); 6 | 7 | return new Promise((resolve,reject)=>{ 8 | originJsonp(url,option,(err,data)=>{ 9 | if (!err) { 10 | resolve(data) 11 | }else{ 12 | reject(err) 13 | } 14 | }) 15 | }) 16 | } 17 | 18 | 19 | function query(data){ 20 | var queryStr=''; 21 | for(var [key,value] of Object.entries(data)){ 22 | queryStr+=`&${key}=${value}`; 23 | } 24 | return queryStr?queryStr.substring(1):''; 25 | } -------------------------------------------------------------------------------- /src/assets/js/song.js: -------------------------------------------------------------------------------- 1 | export default class Song{ 2 | constructor({id, mid, singername, songname, albumname, duration, img, url}){ 3 | this.id = id 4 | this.mid = mid 5 | this.singername = singername 6 | this.songname = songname 7 | this.albumname = albumname 8 | this.duration = duration 9 | this.img = img 10 | this.url = url 11 | } 12 | } 13 | 14 | export function createSong(musicData) { 15 | return new Song({ 16 | id: musicData.songid, 17 | mid: musicData.songmid, 18 | singername: filterSinger(musicData.singer), 19 | songname: musicData.songname, 20 | albumname: musicData.albumname, 21 | duration: musicData.interval, 22 | img: `https://y.gtimg.cn/music/photo_new/T002R300x300M000${musicData.albummid}.jpg?max_age=2592000`, 23 | url: `http://ws.stream.qqmusic.qq.com/C100${musicData.songmid}.m4a?fromtag=0&guid=126548448` 24 | }) 25 | } 26 | 27 | function filterSinger(singer) { 28 | let ret = [] 29 | if (!singer) { 30 | return '' 31 | } 32 | singer.forEach((s) => { 33 | ret.push(s.name) 34 | }) 35 | return ret.join('/') 36 | } -------------------------------------------------------------------------------- /src/assets/js/util.js: -------------------------------------------------------------------------------- 1 | //洗牌算法 2 | function getRandomInt(min, max) { 3 | return Math.floor(Math.random() * (max - min + 1) + min) 4 | } 5 | 6 | export function shuffle(arr) { 7 | let _arr = arr.slice() 8 | let len = _arr.length 9 | for (let i = 0; i < len; i++) { 10 | let j = getRandomInt(0, i) 11 | let t = _arr[i] 12 | _arr[i] = _arr[j] 13 | _arr[j] = t 14 | } 15 | return _arr 16 | } -------------------------------------------------------------------------------- /src/components/IndexHead.vue: -------------------------------------------------------------------------------- 1 | 17 | 22 | -------------------------------------------------------------------------------- /src/components/Loading.vue: -------------------------------------------------------------------------------- 1 | 7 | 17 | -------------------------------------------------------------------------------- /src/components/PageHeader.vue: -------------------------------------------------------------------------------- 1 | 7 | 31 | -------------------------------------------------------------------------------- /src/components/PlayList.vue: -------------------------------------------------------------------------------- 1 | 30 | 170 | -------------------------------------------------------------------------------- /src/components/ProgressBar.vue: -------------------------------------------------------------------------------- 1 | 14 | 88 | -------------------------------------------------------------------------------- /src/components/ProgressCircle.vue: -------------------------------------------------------------------------------- 1 | 7 | 38 | -------------------------------------------------------------------------------- /src/components/SongList.vue: -------------------------------------------------------------------------------- 1 | 23 | 83 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import store from './store' 5 | 6 | //引入mint-ui 7 | import MintUI from 'mint-ui' 8 | import 'mint-ui/lib/style.css' 9 | import './assets/css/my-mint.css' 10 | 11 | Vue.use(MintUI) 12 | 13 | Vue.config.productionTip = false 14 | 15 | new Vue({ 16 | router, 17 | store, 18 | render: h => h(App) 19 | }).$mount('#app') 20 | -------------------------------------------------------------------------------- /src/router.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | Vue.use(Router) 5 | 6 | export default new Router({ 7 | routes: [ 8 | { 9 | path: '/', 10 | redirect:'/index' 11 | }, 12 | { 13 | path: '/index', 14 | name: 'index', 15 | component: () => import('./views/Home.vue'), 16 | children:[ 17 | { 18 | path:"/index/songsheet", 19 | component: () => import('./views/HotSongSheet.vue') 20 | } 21 | ] 22 | }, 23 | { 24 | path:'/singerlist', 25 | name:'singerlist', 26 | component: () => import('./views/Singerlist.vue'), 27 | children:[ 28 | { 29 | path:'/singerlist/singer/:id', 30 | name:'singer', 31 | component:() => import('./views/Singer.vue') 32 | } 33 | ] 34 | }, 35 | { 36 | path:'/toplists', 37 | name:'toplists', 38 | component:() => import('./views/Toplists.vue'), 39 | children:[ 40 | { 41 | path:'/toplists/toplist/:id', 42 | name:'toplist', 43 | component:() => import('./views/Toplist.vue') 44 | } 45 | ] 46 | }, 47 | { 48 | path:'/search', 49 | name:'search', 50 | component:() => import('./views/Search.vue') 51 | }, 52 | { 53 | path:'/album/:id', 54 | name:'album', 55 | component:() => import('./views/Album.vue') 56 | }, 57 | { 58 | path:'/user', 59 | name:'user', 60 | component:() => import('./views/User.vue') 61 | } 62 | ] 63 | }) 64 | -------------------------------------------------------------------------------- /src/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import {shuffle} from '@/assets/js/util' 4 | 5 | Vue.use(Vuex) 6 | 7 | let playMode = { //播放模式, 8 | sequence: 0, 9 | loop: 1, 10 | random: 2 11 | } 12 | 13 | export default new Vuex.Store({ 14 | state: { 15 | playing: false, //播放状态 16 | mode: playMode.sequence, //播放模式,这种写法更语义化 17 | playlist: [], //播放列表 18 | sequencelist: [], //顺序播放列表 19 | currentIndex: -1, //当前播放索引 20 | fullScreen: false, //播放页面是否折叠 21 | other: {}, //其他选项, 22 | mylikeSongs: localStorage['mylikeSongs'] ? JSON.parse(localStorage['mylikeSongs']) : [], 23 | playHistory: localStorage['playHistory'] ? JSON.parse(localStorage['playHistory']) : [], 24 | searchHistory: localStorage['searchHistory'] ? JSON.parse(localStorage['searchHistory']) : [], 25 | }, 26 | getters: { 27 | currentSong(state) { 28 | let Song = { 29 | ...state.playlist[state.currentIndex] 30 | } || {} 31 | if (Song.mid) { 32 | 33 | Song.url = `https://v1.itooi.cn/tencent/url?id=${Song.mid}&quality=128` 34 | } 35 | return Song || {} 36 | } 37 | }, 38 | 39 | 40 | mutations: { 41 | //播放状态 42 | setPlayingState(state, flag) { 43 | state.playing = flag 44 | }, 45 | //播放器全屏 46 | setFullScreenState(state, flag) { 47 | state.fullScreen = flag 48 | }, 49 | //播放列表 50 | setPlaylist(state, list) { 51 | //当setPlaylist和setSequencelist引用同一个list时,改变其中一个会影响另一个 52 | state.playlist = list 53 | }, 54 | //播放队列 55 | setSequencelist(state, list) { 56 | state.sequencelist = list 57 | }, 58 | //播放状态 59 | setModeState(state, mode) { 60 | state.mode = mode 61 | }, 62 | //当前播放的歌曲index 63 | setCurrentIndex(state, index) { 64 | state.currentIndex = index 65 | }, 66 | //其他设置 67 | setOther(state, option) { 68 | state.other = Object.assign(state.other, option) 69 | }, 70 | //加入添加播放记录和缓存 71 | addItem(state, payload) { 72 | //载荷传入key和song 73 | state[payload.key].push(payload.song) 74 | localStorage.setItem(payload.key, JSON.stringify(state[payload.key])) 75 | }, 76 | //加入缓存 77 | addItemPosition(state, payload) { 78 | state[payload.key].splice(payload.index, 0, payload.song) 79 | localStorage.setItem(payload.key, JSON.stringify(state[payload.key])) 80 | }, 81 | //删除缓存 82 | removeItem(state, payload) { 83 | //载荷传入key和index 84 | state[payload.key].splice(payload.index, 1) 85 | localStorage.setItem(payload.key, JSON.stringify(state[payload.key])) 86 | }, 87 | //清除列表 88 | clearList(state, key) { 89 | state[key] = [] 90 | localStorage.setItem(key, JSON.stringify(state[key])) 91 | } 92 | }, 93 | 94 | //Action 一般做异步处理,或将多个mutation封装 95 | actions: { 96 | selectPlay({ 97 | commit, 98 | state 99 | }, { 100 | list, 101 | index 102 | }) { 103 | commit('setSequencelist', list) 104 | if (state.mode === playMode.random) { 105 | let randomList = shuffle(list) 106 | commit('setPlaylist', randomList) 107 | //打乱数组后index也会变化 108 | let oindex = index 109 | index = randomList.findIndex((item) => { 110 | return item.id === list[oindex].id 111 | }) 112 | } else { 113 | commit('setPlaylist', list) 114 | } 115 | commit('setCurrentIndex', index) 116 | commit('setPlayingState', true) 117 | } 118 | } 119 | }) -------------------------------------------------------------------------------- /src/views/Album.vue: -------------------------------------------------------------------------------- 1 | 57 | 115 | 251 | 252 | 253 | 254 | -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 45 | 107 | -------------------------------------------------------------------------------- /src/views/HotSongSheet.vue: -------------------------------------------------------------------------------- 1 | 53 | 93 | -------------------------------------------------------------------------------- /src/views/SIngerlist.vue: -------------------------------------------------------------------------------- 1 | 23 | 98 | -------------------------------------------------------------------------------- /src/views/Search.vue: -------------------------------------------------------------------------------- 1 | 56 | 242 | -------------------------------------------------------------------------------- /src/views/Singer.vue: -------------------------------------------------------------------------------- 1 | 54 | 158 | -------------------------------------------------------------------------------- /src/views/Toplist.vue: -------------------------------------------------------------------------------- 1 | 45 | 115 | -------------------------------------------------------------------------------- /src/views/Toplists.vue: -------------------------------------------------------------------------------- 1 | 22 | 50 | 107 | -------------------------------------------------------------------------------- /src/views/User.vue: -------------------------------------------------------------------------------- 1 | 58 | 151 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | publicPath: './' 3 | } --------------------------------------------------------------------------------