🌵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

来源:稀土掘金

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

相关文章
|
6天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
51 1
|
3天前
|
敏捷开发 人工智能 JavaScript
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
Figma-Low-Code 是一个开源项目,能够直接将 Figma 设计转换为 Vue.js 应用程序,减少设计师与开发者之间的交接时间,支持低代码渲染和数据绑定。
20 3
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
|
17天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 API
Vue.js 3:深入探索组合式API的实践与应用
Vue.js 3:深入探索组合式API的实践与应用
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
48 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
34 1
|
2月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
41 1
vue学习第四章
|
2月前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
32 1
vue学习第7章(循环)

热门文章

最新文章