项目名称:vue-fds_music

项目作者:符道胜

开源许可协议:Apache-2.0

项目地址:https://gitee.com/fudaosheng/vue-fds_music

项目简介

Vue 高仿热门音乐播放器,基本实现所有音乐相关功能。

本项目前端均是作者独立自主开发,所用技术栈:Vue全家桶+better-scroll+axios

后端接口来源及 API 安装可前往项目主页查看具体文档。

项目知识点:Mixin

项目优点

个人觉得本项目最大的优点在于如何触发音乐播放器。一般触发音乐播放器有三种方法:emit、vuex、bus。

1.$emit

缺点:音乐播放器和要播放的音乐所在组件必须有父子关系,而明显在一个音乐app中这是不现实的。

2.vuex

利用vuex的话可以先将要播放的音乐放在vuex中(假设放在state的musiclist中),然后在音乐播放器组件生命周期函数中监听musiclist的状态,当音乐列表不为空时播放音乐。

缺点:

1.会存在musiclist不为空但是监听到的是空的现象,个人感觉是页面渲染先后问题。

2.修改musiclist都要通过mutations比较麻烦。

3.bus

本项目采用的就是bus。使用$bus这样不论音乐播放器和要播放的音乐所在组件是何种关系,都可以监听到要播放的音乐。

项目目录介绍

项目效果图

本项目核心:如何播放音乐

之所以将其放在mixin中,是因为这样在任何一个页面都能使用这个方法,降低了代码的重复性。

import { _getMusicUrl, _getLyric } from "network/detail"
import { playList } from "components/content/playmusic/playList";
export const indexMixin = {methods: {PlayMusic(index = 0) {let path = this.$route.path;let musiclist;if (this.musiclist.length >= 200) {musiclist = this.musiclist.slice(0, 199);}else musiclist = this.musiclist;let url = null,lyric = null,currentLength = 0;let playlist = [];for (let i = 0, length = musiclist.length; i < length; i++) {let getUrl = _getMusicUrl(musiclist[i].id).then(res => {url = res.data.data[0].url;return url;});let getLyric = _getLyric(musiclist[i].id).then(res => {lyric = res.data.tlyric.lyric;return lyric;});Promise.all([getUrl, getLyric]).then(results => {let song = new playList(i, musiclist[i], results[0], results[1]);playlist.push(song);currentLength++;/**每次完成两个网络请求都判断是否满足要求,满足才发送事件 */if (i == musiclist.length - 1) {this.$bus.$emit("playMusic", playlist, index, path);}}).catch(err => {this.$Message.warning('数据加载中,请稍等');});}},}

在音乐播放器组件中接收时:

mounted() {/**list是音乐列表,index是要播放的音乐在列表中的位置,path是当前播放音乐的路由路径 */this.$bus.$on("playMusic", (list, index, path) => {this.music = [];this.path = path;this.music = list;//   this.music = list.filter(item => {//     return item.src !== "";//   });/**对数组进行排序 */this.music = this.music.sort((a, b) => {return a.index - b.index;});/**在请求歌曲的时候可能有的歌曲不可用,或丢失。导致在播放器中的歌曲列表和页面展示存在差异,可能会出现指定的播放歌曲不服* 用一次查找解决问题*/for (let i in this.music) {if (this.music[i].index == index) {this.currentIndex = i;break; //break跳出循环------continue跳出本次循环}}});},

项目目前仍在持续开发中,作者也发现了一些开发过程中的问题,比如说目前遇到的歌手详情页面刷新没有数据。

问题原因 :路由跳转的时候我传入的是一个歌手信息对象,歌手详情的数据都是根据这个对象的信息,id获取的。

 enterArtistDetail(artist) {this.$router.push({path: "/artist",query: {artist: artist}});this.$store.commit('addArtist',artist);}

如果你有解决这个问题的思路,欢迎你点击后面的链接前往项目主页提出 PR,作者也会很乐意与和他一样的 Vue 爱好者们交流:https://gitee.com/fudaosheng/vue-fds_music

前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目相关推荐

  1. vue 判断同一数组内的值是否一直_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目

    项目名称:vue-fds_music 项目作者:符道胜 开源许可协议:Apache-2.0 项目地址:https://gitee.com/fudaosheng/vue-fds_music 项目简介 V ...

  2. 后端实体类接收数组_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目...

    项目名称:vue-fds_music 项目作者:符道胜 开源许可协议:Apache-2.0 项目地址:https://gitee.com/fudaosheng/vue-fds_music 项目简介 V ...

  3. Vue实现仿音乐播放器11-实现访问百度音乐API实现播放音乐功能

    场景 从今日推荐页面点击某首歌曲会将这首歌曲的songid通过路由传递到播放界面, 播放界面调用百度音乐接口实现数据的获取以及音乐的播放. 效果 实现 配置路由 首先在pages目录下新建musicp ...

  4. Vue实现仿音乐播放器5-实现今日推荐访问百度音乐API获取数据

    前文 前面已经实现了音乐导航菜单的切换,现在要实现主页面的今日推荐功能. 效果 实现 实现首页重定向 当应用初始化时,默认进入主页面home页,所以在router下的index.js下配置: expo ...

  5. 基于百度音乐Api的Android高仿音乐播放App可在线试听下载歌词浏览

    基于百度音乐Api的Android高仿音乐播放App可在线试听下载歌词浏览 首先这也是学习过程中开发的一个练手项目,基于百度音乐Api,api在网上搜的,如果想看他的实现,可以下载我的项目来参考.风格 ...

  6. Vue 3 实现音乐播放器,Java web后端实现主流音乐搜索服务

    MGO音乐 mgo-music 版权声明: 皮肤图片来自QQ音乐电脑客户端皮肤缓存.音乐相关接口来自网络和开源项目. 本项目仅用于知识学习,未经许可不得使用.. 源码:MGO音乐-Gitee MGO音 ...

  7. 单片机做的音乐盒c语言程序,简单音乐盒,利用单片机所学DIY一个满意的音乐播放器!...

    这是毕业设计作品,老师要求可以做一个音乐盒或者汉字点阵就免考,虽然考试也很简单,但是我还是决定做一个实物,显得"高大上",本人大一的时候就学会了C语言对单片机的编程,这次课程设计当 ...

  8. Android Studio学写英语听写APP(音乐播放器)一

    最近迷上了AndroidAPP,看了点资料就边学边写,只是打发时间的个人爱好,工具为Android Studio3.0.1,为了偷懒,准备给孩子写个听写APP,思路是到时候从APP下载音频资源包到SD ...

  9. c语言编写音乐播放器完整代码(mciSendString函数的使用方法,第一次使用Visual Studio 2019的详细步骤)

    本文会尽量让和笔者一样只有一点点可怜的c语言基础的小白看懂,并写出自己的音乐播放器. 笔者使用的编译器是Visual Studio 2019,直接在官网下载就行了.下面是Visual Studio 2 ...

最新文章

  1. 一个老工程师对理工科学生的忠告
  2. JDBC-day01
  3. angularjs教程网址
  4. 盐城大数据产业园人才公寓_住在永川大数据产业园人才公寓,是一种怎样的体验?...
  5. 【JavaFx】eclipse搭建JavaFx开发环境
  6. 百度天链平台:企业区块链技术赋能产业创新落地
  7. 提升工作效率的优秀工具收藏
  8. spss之数据预处理
  9. 游戏服务器架构,配置
  10. Jetbrains IDE 各种 plugins 插件下载
  11. Jenkins - Publish Over SSH
  12. vue2 - 基于Export2Excel.js导出Excel案例(js-xlsx插件二次封装使用)
  13. ios引导商店评分问题
  14. centos8显示网络连接激活失败
  15. 微信公众平台开发心得笔记
  16. windows 以管理员身份打开命令行窗口
  17. 虹软-视觉算法-面经(2020届)
  18. Java面向对象-final类和final方法、final变量(常量)
  19. Java使用HttpClient上传图片入库和查询数据库获取图片
  20. 西门子cnc sinumerik_干!货!来!啦!西门子数控模具加工合集

热门文章

  1. odp 加固 mysql 代码_将数组绑定到 ODP.NET 数据库命令
  2. 刚做了一个梦,梦见自己错过了黄金十年
  3. 阿里巴巴2016校园招聘 研发工程师(四)详解
  4. 图书管理系统+购物车JavaScript/Jquery + HTML
  5. set classpath用法记录
  6. java的classpath是什么_Java中的classpath
  7. 爬取豆瓣TOP250电影排行榜
  8. 传智播客学习之正则表达式
  9. 清风数学建模代码笔记1(正课
  10. pyGEDI GEDI数据的读取分析(Python版本)