# music
**Repository Path**: tsftian/music
## Basic Information
- **Project Name**: music
- **Description**: 基于SpringBoot+vue的移动端音乐播放器
music-serve:后端接口
music-manage:音乐后台(Web端)
music-client:音乐前台(移动端)
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2024-12-12
- **Last Updated**: 2024-12-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# music
### 介绍
基于SpringBoot+vue的移动端音乐播放器
music-serve:后端接口
music-manage:音乐后台(Web端)
music-client:音乐前台(移动端)
### 项目截图
#### 一、音乐后台
#### 登录

#### 歌手管理

#### 歌手歌曲管理

#### 榜单管理

#### 榜单歌曲管理

#### 二、音乐前台
#### 推荐、歌手、榜单、搜索




#### 歌手详情页、榜单详情页、播放页




#### 搜索详情页、个人中心、添加歌曲页、歌曲添加成功




### 技术栈
后端
Spring Boot
MyBatis
MySQL
前端
Vue
Vue-Cli3
ElementUI
axios
Vue-Router
Vuex
ES6
### music-client目录结构
src:
├─api ->向后端请求数据
├─base
│ ├─confirm ->删除时的提示框,是否真正删除
│ ├─listview ->歌手列表的主要组件
│ ├─loading ->等待数据加载时显示的组件(一个转圈圈的图案)
│ ├─no-result ->搜索结果不存在时显示的组件
│ ├─progress-bar ->播放器页面的进度条
│ ├─progress-circle ->mini播放器的播放按钮
│ ├─scroll ->实现页面滚动的组件
│ ├─search-box ->搜索框组件
│ ├─search-list ->搜索历史列表
│ ├─slider ->轮播图组件
│ ├─song-list ->歌曲列表
│ ├─switches ->最近播放/搜索历史
│ └─top-tip ->成功添加歌曲提示
├─common
│ ├─fonts
│ ├─image
│ ├─js
│ └─stylus
├─components ->公共组件
│ ├─add-song ->添加歌曲页面
│ ├─m-header ->首页顶部
│ ├─music-list ->歌手详情页主要组件
│ ├─player ->播放器页面
│ ├─playlist ->mini播放器右下角的歌曲列表
│ ├─rank ->榜单页面
│ ├─recommend ->推荐页面
│ ├─search ->搜索页面
│ ├─singer ->歌手页面(引用listview)
│ ├─singer-detail ->歌手详情页(引用music-list)
│ ├─suggest ->搜索结果列表
│ ├─tab ->导航栏(推荐、歌手、排行、搜索)
│ ├─top-list ->榜单详情页面
│ └─user-center ->个人中心页面(我喜欢的/最近听的)
├─router ->路由相关文件
├─store ->vuex相关代码
├─main.js
└─App.vue
index.html ->添加meta标签,移动端常见设置
package.json ->添加了
->"fastclick": "^1.0.6":解决移动端点击300毫秒延迟
->"babel-runtime": "^6.26.0",:对es语法进行转义
->"babel-polyfill": "^6.26.0",对es6api进行转义,例如promise等
### music-client实现的功能
推荐页面、歌手页面、榜单页面、搜索页面、歌手详情页、榜单详情页、播放器页面、播放列表、用户中心等
#### 推荐页面
由轮播图、热门歌曲推荐组成
轮播图使用better-scroll实现,详见slider组件
推荐的歌曲通过axios向后端请求数据,其中图片采用懒加载技术vue-lazyload,优化页面加载速度
为了更好的用户体验,当数据未请求到时,显示loading组件
#### 歌手页面
实现左侧歌手列表与右侧字母列表的联动
左侧的歌手列表通过axios向后端请求数据并重构其数据结构;歌手图片使用懒加载技术vue-lazyload,优化页面加载速度
右侧的字母列表与左侧歌手列表联动,滚动固定标题实现
#### 榜单页面
通过axios向后端请求数据
#### 搜索页面
由搜索框、搜索历史列表、搜索结果列表组成
通过搜索框的关键字请求API获取数据(搜索结果列表),并使用SetTimeout对请求进行了节流处理;若搜索结果为空,使用no-result组件
考虑到移动端键盘占屏的问题,对滚动前的input做了blur()操作
通过localstorage对搜索历史进行缓存,清空搜索历史使用confirm组件
#### 歌手详情页、榜单详情页
由图片+歌曲列表组成
通过歌手id和榜单id向后端请求数据并进行前端路由跳转
点击歌曲列表的某首歌,将歌曲信息传递到父组件,父组件调用vuex的actions中的方法,实现歌曲播放
#### 播放器页面
通过vuex管理播放状态、播放列表、播放模式等进行管理
播放模式有:顺序播放、单曲循环、随机播放,原理是调整播放列表中的歌曲顺序
播放、暂停等功能通过HTML5的audio实现
中部唱片动画使用第三方 JS 动画库 create-keyframe-animation 实现
抽象了一个横向进度条组件和一个圆形进度条组件,横向进度条可以拖动小球和点击进度条来改变播放进度,圆形进度条组件使用SVG的circle元素
歌词通过第三方库lyric-parser进行处理,实现了侧滑显示歌词、歌词跟随进度条高亮等交互效果
通过localstorage存储喜欢歌曲、播放过的歌曲
#### 播放列表
显示当前播放的歌曲列表,可实现修改播放模式、删除歌曲、收藏歌曲、清空播放列表(使用confirm组件)、添加歌曲(使用add-song组件)的功能
#### 用户中心
将localstorage中存储的喜欢的歌曲列表、播放历史显示出来