一.话不多,先看效果:

视频B站效果演示地址~

 (大佬勿入,大佬勿入,大佬勿入)这是个单页面音乐播放器,只用到了 html+css 与很基础的vue语法,所以适合初学者,看一看10分钟就会了~

这个思路是借鉴黑马的~

二.详细制作步骤(完整代码在最后):

1.第一步当然是定义标签,对于每一个标签的作用注释都写得清清楚楚啦~:

<!-- 最底层的盒子 -->
<div class="container" id="container"><!-- 头部区域盒子 --><div class="top"><!-- 搜索框 --><input type="text"   class="txt" v-model='query' @keyup.enter="searchMusic"></div><!-- 歌曲列表区域 --><div class="list"><ul><!-- 每个li是一首歌 --><li v-for="(item,index) in musicList " :key="index"><a href="javascript:;" @click="playMusic(item.id)"></a>{{item.name}}</li></ul></div><!-- 中间区域 --><div class="middle"><!-- 那个旋转的杆 --><img src="img/player_bar.png" alt="x" class="bar" :class="{playing:isPlay}"><!-- 唱片 --><img src="img/disc.png" alt="x" class="disk" :class="{turn:isPlay}"><!-- 唱片中间的海报 --><img :src="poster" class="poster"></div><!-- 评论区 --><h5 class="commentTxt">热门评论:</h5><div class="comment"><ul><!-- 每条评论 --><li v-for="(item,index) in comment" :key="index"><!-- 头像 --><img :src="item.user.avatarUrl" alt="" width="50px" height="50px"><!-- 网名 --><h3>{{item.user.nickname}}</h3><!-- 评论内容 --><p> {{item.content}}</p></li></ul></div><!-- 播放器进度条 --><audio class="music" @play="play" @pause="pause" :src="url" controls autoplay loop></audio></div>

标签里的vue语法解释(先看后面的js部分再看这里更好理解):

 <input type="text"   class="txt" v-model='query' @keyup.enter="searchMusic">

给这个标签 v-model='query’双向绑定数据query,@keyup.enter="searchMusic"绑定键盘回车事件,触发searMusic函数。

 {{item.name}}

放内容,写在{{}}里。item相对于变量。

 <li v-for="(item,index) in musicList " :key="index">

v-for="" 根据 musicList这个数组里元素的数量,动态生成多少个 li 。

 <a href="javascript:;" @click="playMusic(item.id)"></a>

@click="playMusic(item.id)点击事件,触发playMusic(item.id)函数,并传参数。

 <img src="img/player_bar.png" alt="x" class="bar" :class="{playing:isPlay}">

:class="{playing:isPlay},若isPlay值为真,playing这个选择器生效。

 <img :src="poster" class="poster">

:src="poster"地址的值为自己定义的变量poster。

后面都是相似的了,以此类推~

2.定义css部分,对一些不常见的属性都会解释~:

1.整体区域:
       /* 整体 */.container{width: 800px;height: 500px;background-color: rgba(248, 250, 252,0.3);border-radius: 10px;position: relative;overflow: hidden;}

border-radius: 10px; 角弧度
overflow: hidden;溢出隐藏

2.头部区域:
   /* 头部 */.top{position: absolute;top: 0;left: 0;width: 100%;height: 60px;border-radius: 10px 10px 0 0;background-image: linear-gradient(45deg,rgb(99, 202, 243),rgb(9, 253, 180),rgb(40, 106, 230));z-index: 11;}.txt{position: absolute;top: 15px;right: 50px;width: 200px;height: 30px;outline: none;border-radius: 15px;border: none;background-color: rgba(255, 255, 255,0.8);padding: 0  20px 0 20px;font-size: 13px;}

background-image: linear-gradient(45deg,rgb(99, 202, 243),rgb(9, 253, 180),rgb(40, 106, 230));渐变背景色。
z-index: 11; 显示的级别,就是防止被别的元素遮挡,越大越上
border: none; 取消边框

3. 歌曲列表部分:
   /* 歌曲列表 */.list{position: absolute;left: 0;top: 60px;width: 200px;height: 410px;background-color: rgba(255, 255, 255,0.5);}.list>ul{position: absolute;width: 100%;height: 100%;overflow: auto;}.list>ul>li{position: relative;width: 100%;height: 40px;line-height: 40px;font-family: 'fangsong';font-size: 16px;margin-top: 1px;padding-left: 30px;background-color: rgba(255, 255, 255, 0.9);}.list>ul>li>a{position: absolute;top: 50%;left: 5px;transform: translateY(-50%);width: 20px;height: 20px;background-image: url(img/play.png);background-size: 100% 100%;}

overflow: auto;如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
transform: translateY(-50%); 偏移,通常在定位50%后再偏移自身大小50%达到居中效果。

4. 中间部分:
   /* 中间部分 */.middle{position: absolute;left: 210px;top: 60px;width: 410px;height: 410px;}.disk{position: absolute;width: 280px;height: 280px;left: 50%;top: 50%;transform: translate(-50%,-50%) rotateZ(0deg);}.bar{position: absolute;top: -10px;left: 50%;z-index:10;transform-origin: 10px 10px;/*  10 -25 */transform: rotateZ(-25deg);transition: all 1s;}.poster{position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);width: 160px;height: 160px;border-radius: 50%;object-fit: cover;}

transform: translate(-50%,-50%) rotateZ(0deg); translate(-50%,-50%)表偏移, rotateZ(0deg)表旋转。
transform-origin: 10px 10px; 旋转点就是绕哪个点旋转。
transition: all 1s; 过渡效果。
object-fit: cover; 保持图片原有尺寸比例。但部分内容可能被剪切。

5.评论区:
   /* 评论 */.comment{position: absolute;top: 80px;right: -20px;height: 410px;width: 230px;overflow: auto;background-color: rgba(255, 255, 255,.4);border-top-left-radius: 15px;}.commentTxt{position: absolute;top: 60px;right: 110px;width: 100px;height: 20px;line-height: 20px;font-size: 12px;color: rgb(0, 0, 0);}.comment>ul>li{width: 210px;min-height: 50px;margin-top: 10px;font-size: 13px;padding: 5px;text-align:justify;}.comment>ul>li>img{border-radius: 50%;display: inline-block;vertical-align: middle;}.comment>ul>li>h3{display: inline-block;padding-left: 5px;}.comment>ul>li>p{padding-top: 6px;display: block;text-indent: 2em;}

vertical-align: middle;该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。
text-indent: 2em;将段落的第一行缩进xxx像素:

6. 播放器进度条部分:
   /* 进度条 */.music{position: absolute;bottom: 0px;left:0px;width: 800px;height: 34px;outline: none;background-color: rgb(241, 243, 244);         }
7. 杆和唱片转动
   /* 杆和唱片转动 */.playing{transform: rotateZ(10deg);}.turn{animation:turn 3s linear infinite;}@keyframes turn{0%{transform: translate(-50%,-50%) rotateZ(0deg);}100%{transform: translate(-50%,-50%) rotateZ(360deg);}}

3. js部分,用vue语法写

1.先引入:
     <!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><!-- 官网提供的 axios 在线地址 --><script src="https://unpkg.com/axios/dist/axios.min.js"></script>
2.开始(详细请看注释):

歌曲主要调用的是网易云的公开API所得~

   new Vue({el:"#container",data(){return{//搜索关键字query:'',//歌曲列表musicList:[],//当前歌曲地址url:'',//海报地址poster:'./img/timg4.jpg',//判断是否正在播放isPlay: false,//评论comment:[]}},methods:{searchMusic(){// 判断搜索框有没有字if(this.query==''){//没有自己返回return;}// 发送请求获得数据axios({url:'https://autumnfish.cn/search',method:'get',params:{keywords:this.query}}).then(res=>{//把获取数据传给musicList数组,可以通过 console.log(res);查看自己想要的数据this.musicList = res.data.result.songs;})},playMusic(id){//获得歌曲的urlaxios({url:'https://autumnfish.cn/song/url',method:'get',params:{id:id}}).then(res=>{// 将当前歌曲地址设置为这个this.url = res.data.data[0].url;})//获取歌曲海豹axios({url:'https://autumnfish.cn/song/detail',method:'get',params:{ids:id}}).then(res=>{// 把图片地址纯存在poster数组this.poster=res.data.songs[0].al.picUrl})//获取评论axios({url:'https://autumnfish.cn/comment/hot',method:'get',params:{type:0,id:id}}).then(res=>{// 把评论的数据存在comment数组,包括头像,网名等等,可以通过 console.log(res);查看自己想要的数据this.comment=res.data.hotComments})},  // 歌曲是正在播放触发play(){this.isPlay = true;},// 歌曲是停止触发pause(){this.isPlay = false;}}})

三. 完整代码(需要素材与源文件的私信或在评论区留下邮箱,我发你呀):

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>music</title><style>*{margin: 0;padding: 0;box-sizing: border-box;}body{height: 100vh;display: flex;justify-content: center;align-items: center;}/* 背景图 */.bj{position: fixed;top: 0;left: 0;width: 100%;height: 100%;object-fit: cover;z-index: -1000;}/* 整体 */.container{width: 800px;height: 500px;background-color: rgba(248, 250, 252,0.3);border-radius: 10px;position: relative;overflow: hidden;}/* 头部 */.top{position: absolute;top: 0;left: 0;width: 100%;height: 60px;border-radius: 10px 10px 0 0;background-image: linear-gradient(45deg,rgb(99, 202, 243),rgb(9, 253, 180),rgb(40, 106, 230));z-index: 11;}.txt{position: absolute;top: 15px;right: 50px;width: 200px;height: 30px;outline: none;border-radius: 15px;border: none;background-color: rgba(255, 255, 255,0.8);padding: 0  20px 0 20px;font-size: 13px;}/* 歌曲列表 */.list{position: absolute;left: 0;top: 60px;width: 200px;height: 410px;background-color: rgba(255, 255, 255,0.5);}.list>ul{position: absolute;width: 100%;height: 100%;overflow: auto;}.list>ul>li{position: relative;width: 100%;height: 40px;line-height: 40px;font-family: 'fangsong';font-size: 16px;margin-top: 1px;padding-left: 30px;background-color: rgba(255, 255, 255, 0.9);}.list>ul>li>a{position: absolute;top: 50%;left: 5px;transform: translateY(-50%);width: 20px;height: 20px;background-image: url(img/play.png);background-size: 100% 100%;}/* 中间部分 */.middle{position: absolute;left: 210px;top: 60px;width: 410px;height: 410px;}.disk{position: absolute;width: 280px;height: 280px;left: 50%;top: 50%;transform: translate(-50%,-50%) rotateZ(0deg);}.bar{position: absolute;top: -10px;left: 50%;z-index:10;transform-origin: 10px 10px;/*  10 -25 */transform: rotateZ(-25deg);transition: all 1s;}.poster{position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);width: 160px;height: 160px;border-radius: 50%;object-fit: cover;}/* 评论 */.comment{position: absolute;top: 80px;right: -20px;height: 410px;width: 230px;overflow: auto;background-color: rgba(255, 255, 255,.4);border-top-left-radius: 15px;}.commentTxt{position: absolute;top: 60px;right: 110px;width: 100px;height: 20px;line-height: 20px;font-size: 12px;color: rgb(0, 0, 0);}.comment>ul>li{width: 210px;min-height: 50px;margin-top: 10px;font-size: 13px;padding: 5px;text-align:justify;}.comment>ul>li>img{border-radius: 50%;display: inline-block;vertical-align: middle;}.comment>ul>li>h3{display: inline-block;padding-left: 5px;}.comment>ul>li>p{padding-top: 6px;display: block;text-indent: 2em;}/* 进度条 */.music{position: absolute;bottom: 0px;left:0px;width: 800px;height: 34px;outline: none;background-color: rgb(241, 243, 244);         }/* 杆和唱片转动 */.playing{transform: rotateZ(10deg);}.turn{animation:turn 3s linear infinite;}@keyframes turn{0%{transform: translate(-50%,-50%) rotateZ(0deg);}100%{transform: translate(-50%,-50%) rotateZ(360deg);}}</style>
</head>
<body><video src="./video.mp4" class="bj" muted autoplay loop ></video> <div class="container" id="container"><!-- 头部 --><div class="top"><input type="text"   class="txt" v-model='query' @keyup.enter="searchMusic"></div><div class="list"><ul><li v-for="(item,index) in musicList " :key="index"><a href="javascript:;" @click="playMusic(item.id)"></a>{{item.name}}</li></ul></div><div class="middle"><!-- 杆 --><img src="img/player_bar.png" alt="x" class="bar" :class="{playing:isPlay}"><!-- 唱片 --><img src="img/disc.png" alt="x" class="disk" :class="{turn:isPlay}"><!-- 海报 --><img :src="poster" class="poster"></div><h5 class="commentTxt">热门评论:</h5><div class="comment"><ul><li v-for="(item,index) in comment" :key="index"><img :src="item.user.avatarUrl" alt="" width="50px" height="50px"><h3>{{item.user.nickname}}</h3><p> {{item.content}}</p></li></ul></div><audio class="music" @play="play" @pause="pause" :src="url" controls autoplay loop></audio></div><!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><!-- 官网提供的 axios 在线地址 --><script src="https://unpkg.com/axios/dist/axios.min.js"></script><script>new Vue({el:"#container",data(){return{//搜索关键字query:'',//歌曲列表musicList:[],//当前歌曲地址url:'',//海报poster:'./img/timg4.jpg',//判断是否正在播放isPlay: false,//评论comment:[]}},methods:{searchMusic(){if(this.query==''){return;}axios({url:'https://autumnfish.cn/search',method:'get',params:{keywords:this.query}}).then(res=>{this.musicList = res.data.result.songs;})},playMusic(id){axios({url:'https://autumnfish.cn/song/url',method:'get',params:{id:id}}).then(res=>{this.url = res.data.data[0].url;})axios({url:'https://autumnfish.cn/song/detail',method:'get',params:{ids:id}}).then(res=>{this.poster=res.data.songs[0].al.picUrl})axios({url:'https://autumnfish.cn/comment/hot',method:'get',params:{type:0,id:id}}).then(res=>{this.comment=res.data.hotComments})},  play(){this.isPlay = true;},pause(){this.isPlay = false;}}})</script>
</body>
</html>

四.总结:

这样子就完成了~
再说一遍,需要素材与源文件的私信或在评论区留下你的邮箱,我发你呀,可以对比源码和文章注释学习~
对了,夏目友人帐大家看了吗,又被治愈了~

其它:

文字烟雾效果 html+css+js
环绕倒影加载特效 html+css
气泡浮动背景特效 html+css
简约时钟特效 html+css+js
赛博朋克风格按钮 html+css
仿网易云官网轮播图 html+css+js
水波加载动画 html+css
导航栏滚动渐变效果 html+css+js
书本翻页 html+css
3D立体相册 html+css
霓虹灯绘画板效果 html+css+js
记一些css属性总结(一)
Sass总结笔记
…等等
进我主页看更多~

手把手教你10分钟做一个音乐播放器相关推荐

  1. 如何使用uni-app做一个音乐播放器

    如何使用uni-app做一个音乐播放器 uni-app提供给我们非常棒的API,可以做出很好看的自定义样式的音乐播放器 好的编译器可以让我们的项目事半功倍,HBuilderX可以很方便的创建uni-a ...

  2. 23|VS2017 基于MFC 做一个音乐播放器,带音量调节,切换歌曲

    最近接到个小任务,用MFC做一个音乐播放器,不过这也是一直想尝试的,于是今天早上9点到下午16:00,总算是完成了需要的功能 开门见山,先展示一下整体界面 下面按照功能模块介绍我做这个播放器的过程 预 ...

  3. 用React做一个音乐播放器

    介绍 任何正在学习 React 并想使用 React 构建项目的人.有各种博客和文章可以为开发人员指导此类项目.我确实浏览过这些文章,但其中总是缺少一种项目.缺少的项目是音乐播放器和视频播放器.这两个 ...

  4. android做一个音乐播放器,制作一个简单的Android版的音乐播放器

    音乐播放器是一个非常常见的应用,这篇博客就是介绍如何制作一个简单的音乐播放器,这款音乐播放器具有以下的功能:播放歌曲.暂停播放歌曲..显示歌曲的总时长.显示歌曲的当前播放时长.调节滑块可以将歌曲调节到 ...

  5. 【Navidrome 开源音乐服务器】手把手教你打造属于自己的音乐播放器随时随地想听就听

    目录 1. 前言 2. Navidrome网站搭建 2.1 Navidrome下载和安装 2.1.1 安装并添加ffmpeg 2.1.2下载并配置Navidrome 2.1.3 添加Navidrome ...

  6. 用vue做一个音乐播放器

    xz-music 音乐播放器(web移动端) 开源协议MIT License github: https://github.com/huangweizhi/xz-music.git gitee: ht ...

  7. JS和H5做一个音乐播放器,附带源码

    http://mp.weixin.qq.com/s/KpXT9X46AMlUVXQvpHuXGQ 效果图: 实现的功能 1.首页 2.底部播放控件 3.播放页面 4.播放列表 5.排行榜 6.音乐搜索 ...

  8. 用js,css做一个音乐播放器

    做好如图所示: 下面开始上代码: html代码: <!DOCTYPE html> <html lang="en"> <head> <met ...

  9. 教你用树莓派Python打造一个音乐播放器

    买了个树莓派3B+,装好系统后灰落了好厚一层都不知道要干嘛...最近突发奇想:用树莓派做一个音乐播放器,每天6:30-7:20自动播放英语听力,强迫自己练习英语,也治治自己的懒床习惯,平时也可以用来听 ...

最新文章

  1. 基础回顾之List集合
  2. Burnside引理与Pólya定理
  3. 为什么Spark能成为最火的大数据计算引擎?它是怎样工作的?
  4. ssm注解配置连接mysql_SSM框架整合(注解)-Spring+SpringMVC+MyBatis+MySql
  5. 解读:滴滴“猜你去哪儿”功能的算法实现
  6. Jenkins 2.x版本的节点配置选项更新
  7. bootstrap 树
  8. Win10系统字体太小的调整设置教程
  9. 21世纪大学生之你是属于哪种看网课。
  10. 扒一扒贝索斯的接班人,为何选他挑起大梁?
  11. 基于SSM的图书商城的设计与实现(文末附源码)
  12. php 伪静态是什么意思,php伪静态的写法是什么
  13. 哈罗选了个好时点上线顺风车业务,但很可能雷声大雨点小
  14. java 改变图片某个坐标点的颜色,并返回给前台显示
  15. 超快速!10分钟入门Keras指南
  16. 外汇天眼:央行人民币降息意味着什么?有什么影响?
  17. 无线开关量收发模块实现一发多收/一收多发
  18. v-for和v-show一起使用
  19. DTO-VO-DO-Query理解
  20. 免费下载学术文献的网站,好用!

热门文章

  1. golang的int64排序_go语言中的排序讲解
  2. Sketchup模型无破面无丢面完美导入Unity3D的正确流程【2020】
  3. 卖水果老板讲解工厂模式第二天营业~
  4. 国内能用 公共DNS 服务器地址
  5. 51单片机c语言共阳断码表,单片机的共阴共阳8段码的原理及显示代码
  6. android笔试汇总
  7. word转pdf出现空白页
  8. mysql程序设计语言_access数据库程序设计
  9. Java编程基础测题(二十道)
  10. opencv学习之数据结构与数据操作