README.md 6.2 KB
Newer Older
C
update  
cpongo2 已提交
1

知心宝贝's avatar
知心宝贝 已提交
2 3 4 5
![在这里插入图片描述](https://img-blog.csdnimg.cn/5972451e6662499c918b4a25a205e9ca.gif#pic_center)
<hr>

@[TOC](云音乐)
C
update  
cpongo2 已提交
6

知心宝贝's avatar
知心宝贝 已提交
7
<hr>
C
update  
cpongo2 已提交
8

知心宝贝's avatar
知心宝贝 已提交
9
## 一、基本介绍
View Design's avatar
View Design 已提交
10

AresnLiang's avatar
AresnLiang 已提交
11
本项目使用`vue2+vue-cli`实现了一个简易的网易云音乐(**App版本**),实现了歌曲的首页推荐展示,歌曲的搜索,评论的展示以及歌曲的播放四个主要功能模块,主要用来练手,效果如下图所示:
View Design's avatar
View Design 已提交
12

知心宝贝's avatar
知心宝贝 已提交
13 14
**首页**
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/4e83b082a056f3084a4fc61bb8b83415.png#pic_center)
View Design's avatar
View Design 已提交
15

知心宝贝's avatar
信息  
知心宝贝 已提交
16

View Design's avatar
View Design 已提交
17

知心宝贝's avatar
知心宝贝 已提交
18
**搜索页面**
View Design's avatar
View Design 已提交
19

知心宝贝's avatar
知心宝贝 已提交
20
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/b993688aec1d533d18daea9f9ae7f767.png#pic_center)
慢慢走~'s avatar
慢慢走~ 已提交
21

View Design's avatar
View Design 已提交
22

知心宝贝's avatar
知心宝贝 已提交
23
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/843d71d99eff8fd1499b8b67ac980e49.png#pic_center)
View Design's avatar
View Design 已提交
24 25


知心宝贝's avatar
知心宝贝 已提交
26
**评论**
View Design's avatar
View Design 已提交
27

知心宝贝's avatar
知心宝贝 已提交
28
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/f2fbac620e7a370af0a17dcd8e581a74.png#pic_center)
View Design's avatar
View Design 已提交
29

知心宝贝's avatar
知心宝贝 已提交
30
**音乐播放**
View Design's avatar
View Design 已提交
31

知心宝贝's avatar
知心宝贝 已提交
32
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/40e5b981fa3913ce010776fb5e5f1467.png#pic_center)
慢慢走~'s avatar
慢慢走~ 已提交
33

View Design's avatar
View Design 已提交
34

知心宝贝's avatar
知心宝贝 已提交
35
## 二、项目使用
View Design's avatar
View Design 已提交
36

AresnLiang's avatar
AresnLiang 已提交
37
**github地址**[cloud-music](https://github.com/bosombaby/cloud-music)
View Design's avatar
View Design 已提交
38

知心宝贝's avatar
知心宝贝 已提交
39
**在线预览:**[云音乐](https://music.vrteam.top)
慢慢走~'s avatar
慢慢走~ 已提交
40

AresnLiang's avatar
AresnLiang 已提交
41
## 三、开发环境
View Design's avatar
View Design 已提交
42

AresnLiang's avatar
AresnLiang 已提交
43
### 2.1 代理服务器
慢慢走~'s avatar
慢慢走~ 已提交
44

知心宝贝's avatar
知心宝贝 已提交
45
`api链接`:https://binaryify.github.io/NeteaseCloudMusicApi/#/![3](https://img-blog.csdnimg.cn/img_convert/43f9418ad00c362131e1a17ffd92e818.png)
慢慢走~'s avatar
慢慢走~ 已提交
46

AresnLiang's avatar
AresnLiang 已提交
47
`总结`:根据文档在后端跑起来代理服务器
View Design's avatar
View Design 已提交
48

AresnLiang's avatar
AresnLiang 已提交
49
### 2.2 搭建前端项目
View Design's avatar
View Design 已提交
50

AresnLiang's avatar
AresnLiang 已提交
51
接下来使用`yarn`代替`npm`,原因:https://blog.csdn.net/qq_39122387/article/details/109675680
View Design's avatar
View Design 已提交
52

AresnLiang's avatar
AresnLiang 已提交
53
#### 2.2.1 脚手架
View Design's avatar
View Design 已提交
54

AresnLiang's avatar
AresnLiang 已提交
55 56 57
```js
vue create music-demo
```
View Design's avatar
View Design 已提交
58

AresnLiang's avatar
AresnLiang 已提交
59
`总结`:默认选择`vue2``yarn`安装依赖的方式
View Design's avatar
View Design 已提交
60

AresnLiang's avatar
AresnLiang 已提交
61
#### 2.2.2 项目依赖
View Design's avatar
View Design 已提交
62

AresnLiang's avatar
AresnLiang 已提交
63
**进入项目文件夹**
View Design's avatar
View Design 已提交
64

AresnLiang's avatar
AresnLiang 已提交
65 66 67
```
cd  music-demo
```
View Design's avatar
View Design 已提交
68

AresnLiang's avatar
AresnLiang 已提交
69
**第三方依赖**
View Design's avatar
View Design 已提交
70

AresnLiang's avatar
AresnLiang 已提交
71 72 73
```
yarn add axios vant@latest-v2 vue-router@3
```
View Design's avatar
View Design 已提交
74

AresnLiang's avatar
AresnLiang 已提交
75
注意版本,这个是vue2的项目,对应的包有所变化
View Design's avatar
View Design 已提交
76

AresnLiang's avatar
AresnLiang 已提交
77
**生产依赖**
View Design's avatar
View Design 已提交
78

AresnLiang's avatar
AresnLiang 已提交
79 80 81 82
```
yarn add babel-plugin-import postcss postcss-pxtorem@5.1.1  -D
yarn add less less-loader@5.0.0 -D
```
View Design's avatar
View Design 已提交
83

AresnLiang's avatar
AresnLiang 已提交
84
**引入本地样式、图标**
View Design's avatar
View Design 已提交
85

AresnLiang's avatar
AresnLiang 已提交
86 87 88 89 90 91 92 93
```js
// 字体图标
import '@/assets/fonts/TsangerYuYangT_W01_W01.ttf'
//自适应
import '@/mobile/flexible'
//初始化样式
import '@/styles/reset.css'
```
View Design's avatar
View Design 已提交
94

AresnLiang's avatar
AresnLiang 已提交
95
**在babel.config.js - 添加vant按需引入插件配置**
慢慢走~'s avatar
慢慢走~ 已提交
96

AresnLiang's avatar
AresnLiang 已提交
97 98 99 100 101 102 103 104 105
```js
plugins: [
    ['import', {
      libraryName: 'vant',
      libraryDirectory: 'es',
      style: true
    }, 'vant']
  ]
```
慢慢走~'s avatar
慢慢走~ 已提交
106

AresnLiang's avatar
AresnLiang 已提交
107
**postcss.config.js自定义自适应比例**
慢慢走~'s avatar
慢慢走~ 已提交
108

AresnLiang's avatar
AresnLiang 已提交
109 110 111 112 113 114 115 116 117 118 119 120 121
```js
module.exports = {
    plugins: {
      'postcss-pxtorem': {
        // 能够把所有元素的px单位转成Rem
        // rootValue: 转换px的基准值。
        // 例如一个元素宽是75px,则换成rem之后就是2rem。
        rootValue: 37.5,
        propList: ['*']
      }
    }
  }
```
View Design's avatar
View Design 已提交
122

AresnLiang's avatar
AresnLiang 已提交
123
`注意`:每一次改动`src`目录之外的内容需要**重启服务**
慢慢走~'s avatar
慢慢走~ 已提交
124

AresnLiang's avatar
AresnLiang 已提交
125
## 四、需求分析
View Design's avatar
View Design 已提交
126

知心宝贝's avatar
知心宝贝 已提交
127
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/332d48779071ecf252f6ddb92c918f55.png#pic_center)
View Design's avatar
View Design 已提交
128 129 130



知心宝贝's avatar
知心宝贝 已提交
131
![1](https://img-blog.csdnimg.cn/img_convert/216da4c66aacddfbd2e07c9fb823eb81.png)
View Design's avatar
View Design 已提交
132 133 134



AresnLiang's avatar
AresnLiang 已提交
135
`App`:管理所有的组件
View Design's avatar
View Design 已提交
136

AresnLiang's avatar
AresnLiang 已提交
137 138 139 140 141
-  `Layout`:管理首页和搜索
  - `Home`:主页
    - `SongItem`:负责音乐的布局
  - `Search`:搜索页
    - `SongItem`:负责音乐的布局
View Design's avatar
View Design 已提交
142

AresnLiang's avatar
AresnLiang 已提交
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
- `Play`:音乐播放

- `Comment`:评论页



`Play``Comment``Layout`平级,需要的时候直接调用就行



## 五、路由管理

```js
// 引入Vue
import Vue from 'vue'
// 引入路由
import VueRouter from "vue-router"
Vue.use(VueRouter)
// 引入组件
import Layout from '@/views/Layout'
import HomePage from '@/views/Home'
import SearchPage from '@/views/Search'
import Play from '@/views/Play'
import Comment from '@/views/Comment'


const routes = [
    {
        path: '/',
        redirect:'/layout'
    },
    {
        path: '/layout',
        redirect: '/layout/home',
        component: Layout,
        children: [
            {
                path: 'home',
                component: HomePage,
                meta: {
                    title:'首页'
                },
            },
            {
                path: 'search',
                component: SearchPage,
                meta: {
                    title:'搜索'
                },
            }
        ]
    },
    {
        path: '/play',
        component:Play
    },
    {
        path: '/comment',
        component:Comment
    }
    
]
const router = new VueRouter({ routes })

export default router
```



## 六、接口管理

```js
//所有api的管理者
import { recommendMusicAPI, newMusicAPI } from "@/api/Home";
import { hotSearchAPI, searchResultAPI } from "@/api/Search";
import { getSongByIdAPI, getLyricByIdAPI } from '@/api/Play'
import { getHotCommentAPI} from '@/api/Comment'

export { recommendMusicAPI,newMusicAPI,hotSearchAPI,searchResultAPI,getSongByIdAPI,getLyricByIdAPI,getHotCommentAPI}
```

## 七、难点分析

### 7.1  搜索页面

**防抖与节流**

`防抖`:像电梯门一样,每一次有人进来之后,电梯门就会重新计时,最终的记时完成,才会触发,相当于setTimeout

`节流`:像英雄的技能一样,触发一次之后要等待一段时间才能继续执行,相当于 setInterval

搜索歌曲避免多次发起请求,使用`防抖`实现

### 7.2 播放页面

`样式`:css的动画样式

`three.js`:打算引入`粒子特效`实现3d音乐效果的(后续需求,一开始未做好规划,不好加了)

### 7.3 评论页面

**评论的刷新与加载**

- vant组件库`List 列表`` PullRefresh `结合,List 组件通过 `loading``finished` 两个变量控制加载状态,当组件滚动到底部时,会触发 `load` 事件并将 `loading` 设置成 `true`。此时可以发起异步操作并更新数据,数据更新完毕后,将 `loading` 设置成 `false` 即可。若数据已全部加载完毕,则直接将 `finished` 设置成 `true` 即可

### 7.4 异步

`Promise`:将异步转换为同步`async await`(就近原则使用),等待数据返回之后再继续执行下面的代码

## 八、项目总结

知心宝贝's avatar
知心宝贝 已提交
254
这次主要对`vue2`的项目进行锻炼。学习了模块化处理流程,对待不同的功能模块要进行合理的分区,前期一定要做好项目规划处理,后续开始学习`vue3`以及`three.js`