🌵Vue综合应用-打造一款属于自己的音乐播放器

简介: 🌵Vue综合应用-打造一款属于自己的音乐播放器

1.音乐播放器案例


歌曲搜索接口:


  • 请求地址:autumnfish.cn/search
  • 请求方式:get
  • 请求参数:keywords
  • 响应内容:歌曲搜索结果


2. 开始操作啦!


2.1 第一步:先写一个简易的播放器界面


header部分包含了播放器名称,搜索框,以及搜索按钮。 main部分包含了粉红色区域歌曲列表,中间灰色区域播放器部分以及右侧评论部分。


5242ff3a2ce54f5bb52390a64d9c14c8_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


2.2 第二步,音乐查询,并渲染到左侧歌曲列表中


  1. 创建Vue,并挂载到这个播放器。


  1. 创建数据query,musicList。


  1. 创建方法searchMusic。


c3f89771673a43eca235b00bc89740b0_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  1. 将query用v-model指令和searchMusic方法通过v-on指令绑定给搜索框。


<input type="text" v-model="query" @keyup.enter="searchMusic">
复制代码


  1. 将musicList用v-for指令绑定给我们的列表。


<li v-for=" item in musicList"><b>{{item.name}}</b></li>
复制代码


为什么这里是item.name呢?


首先我们我们通过axios库的get方法请求成功后得到的数据应该是这样的: 我们搜索“学猫叫”然后在浏览器中打印结果。


6f112e878d174eed981ee441ce35ef9b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


我们可以看到这个歌曲信息存储在data属性下面的result属性下面的songs属性里的这个数组中,于是乎我们把这个数组返回给我们musicList,此时musicList存储的就是这个数组,我们列表渲染的应该是歌曲名字,故取数组中每个元素的name属性。 看!歌曲名字已经渲染到列表上啦!


4cd25c77b3c24bec9bf8a25caf27b131_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


2.3 如何播放歌曲?


歌曲的请求地址:autumnfish.cn/song/url

请求方法:get

响应参数:id

响应内容:歌曲的url地址


获取ID


<li v-for=" item in musicList">
                    <a href="javascript:;" @click="playMusic(item.id)">播放</a><b>{{item.name}}</b>
                </li>
                //这里的item.id作为参数传递到playMusic方法,然后通过该参数获取歌曲地址
复制代码


d34d18e8ff39424a9927a95866921b96_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


获取歌曲地址


playMusic: function (musicId) {
                    console.log(musicId);
                    axios.get("https://autumnfish.cn/song/url?id=" + musicId)
                        .then(function (response) {
                            console.log(response.data.data[0].url);
                        }, function (err) { })
复制代码


c9db8f3234e54268ab6f3b85d1d52b60_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


将获取的歌曲地址添加到audio标签


这里需要musicUrl来存储地址,


在data中添加。


data: {
                query: "",
                musicList: [],
                musicUrl: ""
            },
复制代码


接下来通过v-bind指令绑定到audio的属性。


<audio :src="musicUrl" controls="controls" autoplay="autoplay" loop="loop" class="myaudio"></audio>
复制代码


好啦,播放歌曲功能现在已经实现了。


1eda0dfffb384898b1c30f8a8e05839c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif


总结:歌曲id依赖歌曲搜索的结果,对于不用的数据也需要关注。


2.4 歌曲封面获取


请求地址:https://autumnfish.cn/song/detail
请求方法:get
请求参数:ids(歌曲id)
响应内容:歌曲详情(包括封面信息)
复制代码


增加歌曲详情获取方法 我们先在数据中创建一个变量imgUrl,然后调用axios请求库


axios.get("https://autumnfish.cn/song/detail?ids=" + musicId)
                        .then(function (response) {
                            that.imgUrl = response.data.songs[0].al.picUrl
                        }, function (err) { })
复制代码


接下来把imgUrl的值绑定给封面元素的属性


bca5f3b04375404da012e4fe03b65bb3_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


这样我们就可以实时获取到歌曲的封面


2.5 歌曲评论获取


请求地址:https://autumnfish.cn/comment/hot?type=0
请求方法:get
请求参数:id(歌曲id,地址中的type固定为0)
响应内容:歌曲的热门评论
复制代码


首先在数据中创建hotComments空数组,然后调用axios请求库


axios.get("https://autumnfish.cn/comment/hot?type=0&id=" + musicId)
     .then(function (response) {
        that.hotComments = response.data.hotComments;
        console.log(response.data.hotComments)
        }, function (err) { })
复制代码


然后通过v-for指令1绑定给这个模块


76add0fbaf9d46f9a8e6a793907be99f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


**最后我们在把这个播放器美化以下,一起来看看效果吧! **



这个控制唱片旋转的功能通过给audio标签的play事件在音频播放时触发。

网络异常,图片无法展示
|
然后再数据中创建一个值为false的isPlay变量 接下来定义play和pause方法

网络异常,图片无法展示
|
然后给中间模块通过v:bind绑定属性值

网络异常,图片无法展示
|
好啦,自己的专属播放器就完成啦! 源码地址: gitee.com/chengzi_777…


作者:Cvgod

链接:https://juejin.cn/post/6954323849919856648

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章
|
12天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
28 1
vue学习第四章
|
12天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
26 1
vue学习第九章(v-model)
|
12天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
27 1
vue学习第十章(组件开发)
|
18天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
18天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
18天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
18天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
17天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
26 3
|
17天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
36 2
|
19天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。