🌵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

来源:稀土掘金

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

相关文章
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
301 2
|
1月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
280 137
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
777 0
|
3月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
428 1
|
4月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
403 1
|
4月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
259 0
|
7月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
1010 4
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
835 77
|
7月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍