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

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

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

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

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

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

View Design's avatar
View Design 已提交
15

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

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

View Design's avatar
View Design 已提交
20

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


知心宝贝's avatar
知心宝贝 已提交
24
**评论**
View Design's avatar
View Design 已提交
25

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

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

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

View Design's avatar
View Design 已提交
32

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

知心宝贝's avatar
知心宝贝 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
### 2.1 安装依赖

```javascript
yarn
```


### 2.2 本地使用

```javascript
yarn serve
```

### 2.3 打包上传


```javascript
yarn build
```


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

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

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

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

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

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

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

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

AresnLiang's avatar
AresnLiang 已提交
72
#### 2.2.1 脚手架
View Design's avatar
View Design 已提交
73

AresnLiang's avatar
AresnLiang 已提交
74 75 76
```js
vue create music-demo
```
View Design's avatar
View Design 已提交
77

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

AresnLiang's avatar
AresnLiang 已提交
80
#### 2.2.2 项目依赖
View Design's avatar
View Design 已提交
81

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

AresnLiang's avatar
AresnLiang 已提交
84 85 86
```
cd  music-demo
```
View Design's avatar
View Design 已提交
87

AresnLiang's avatar
AresnLiang 已提交
88
**第三方依赖**
View Design's avatar
View Design 已提交
89

AresnLiang's avatar
AresnLiang 已提交
90 91 92
```
yarn add axios vant@latest-v2 vue-router@3
```
View Design's avatar
View Design 已提交
93

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

AresnLiang's avatar
AresnLiang 已提交
96
**生产依赖**
View Design's avatar
View Design 已提交
97

AresnLiang's avatar
AresnLiang 已提交
98 99 100 101
```
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 已提交
102

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

AresnLiang's avatar
AresnLiang 已提交
105 106 107 108 109 110 111 112
```js
// 字体图标
import '@/assets/fonts/TsangerYuYangT_W01_W01.ttf'
//自适应
import '@/mobile/flexible'
//初始化样式
import '@/styles/reset.css'
```
View Design's avatar
View Design 已提交
113

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

AresnLiang's avatar
AresnLiang 已提交
116 117 118 119 120 121 122 123 124
```js
plugins: [
    ['import', {
      libraryName: 'vant',
      libraryDirectory: 'es',
      style: true
    }, 'vant']
  ]
```
慢慢走~'s avatar
慢慢走~ 已提交
125

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

AresnLiang's avatar
AresnLiang 已提交
128 129 130 131 132 133 134 135 136 137 138 139 140
```js
module.exports = {
    plugins: {
      'postcss-pxtorem': {
        // 能够把所有元素的px单位转成Rem
        // rootValue: 转换px的基准值。
        // 例如一个元素宽是75px,则换成rem之后就是2rem。
        rootValue: 37.5,
        propList: ['*']
      }
    }
  }
```
View Design's avatar
View Design 已提交
141

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

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

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



知心宝贝's avatar
知心宝贝 已提交
150
![1](https://img-blog.csdnimg.cn/img_convert/216da4c66aacddfbd2e07c9fb823eb81.png)
View Design's avatar
View Design 已提交
151 152 153



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

AresnLiang's avatar
AresnLiang 已提交
156 157 158 159 160
-  `Layout`:管理首页和搜索
  - `Home`:主页
    - `SongItem`:负责音乐的布局
  - `Search`:搜索页
    - `SongItem`:负责音乐的布局
View Design's avatar
View Design 已提交
161

AresnLiang's avatar
AresnLiang 已提交
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 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
- `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
知心宝贝 已提交
273
这次主要对`vue2`的项目进行锻炼。学习了模块化处理流程,对待不同的功能模块要进行合理的分区,前期一定要做好项目规划处理,后续开始学习`vue3`以及`three.js`
知心宝贝's avatar
知心宝贝 已提交
274 275 276


# 九、GitCode地址
知心宝贝's avatar
知心宝贝 已提交
277

知心宝贝's avatar
知心宝贝 已提交
278
`项目`:https://gitcode.net/qq_53673551/1024
知心宝贝's avatar
知心宝贝 已提交
279 280 281