个人小作品之迷你音乐播放器(移动端)
关于viewport
设置viewport
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
- width:控制 viewport 的大小,可以指定的一个值,如 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。
- height:和 width 相对应,指定高度。
- initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。
- maximum-scale:允许用户缩放到的最大比例。
- minimum-scale:允许用户缩放到的最小比例。
本作品源代码GitHub:点击查看本作品源代码
开始制作播放器
<!doctype html>
<html lang="zh-en"><head><meta charset="utf-8"><title>迷你音乐播放器</title><link rel="stylesheet" href="css/style.css"><meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0"></head><body><header><h3 class="musicTitle"></h3></header><section class="singer"><div><img src="data:images/tx.jpg"></div></section><!-- 进度条部分 --><section class="progress"><div class="bg"></div><div class="bar"></div></section><!-- 按钮部分 --><section class="btn"><div class="prev iconfont"></div><div class="play iconfont"></div><div class="pause iconfont"></div><div class="next iconfont"></div></section><!-- 音频播放部分 --><audio src="mp3/" id="myMusic"></audio><script src="js/js.js"></script></body>
</html>
- 进度条原理:就是不断改变 进度条的背景宽度 来 实现进度条的颜色改变部分。
<!-- 进度条部分 -->
<section class="progress"><div class="bg"></div><div class="bar"></div>
</section>
- 不断改变 进度条的背景宽度 来 实现 进度条颜色部分。
- 对于小滑块部分,使用CSS3中的tranform: translate();属性来代替定位属性。
transform: translate(0rem, -.15rem); /* 代替绝对定位 */
分别为水平方向、垂直方向上的偏移。
- 对于按钮部分,是使用 阿里图标 来代替图片,称为 IcomFont图标。
- 第一步,使用font-face声明字体:
@font-face {font-family: 'iconfont';src: url('../iconfont/iconfont.eot');src: url('../iconfont/iconfont.eot?#iefix') format('embedded-opentype'),url('../iconfont/iconfont.woff') format('woff'),url('../iconfont/iconfont.ttf') format('truetype'),url('../iconfont/iconfont.svg#iconfont') format('svg');
}
其中,"font-family"为自定义的字体名称,注:src、url属性路径要正确。
- 第二步,定义使用iconfont的样式:
.iconfont{font-family:"iconfont" !important;font-size: 1.5rem;font-style: normal;-webkit-font-smoothing: antialiased;-webkit-text-stroke-width: 0.2px;-moz-osx-font-smoothing: grayscale;color: #fff;
}
- 第三步,挑选相应图标并获取相应字体编码,应用于页面
<div class="prev iconfont"></div>
<div class="play iconfont"></div>
<div class="pause iconfont"></div>
<div class="next iconfont"></div>
效果:
* {padding: 0;margin: 0;
}body {background: url("../images/bg.jpg");
}header {width: 100%;height: 2rem;text-align: center;color: #fff;
}/* 自定义字体,阿里图标 */
@font-face {font-family: 'iconfont';src: url('../iconfont/iconfont.eot');src: url('../iconfont/iconfont.eot?#iefix') format('embedded-opentype'),url('../iconfont/iconfont.woff') format('woff'),url('../iconfont/iconfont.ttf') format('truetype'),url('../iconfont/iconfont.svg#iconfont') format('svg');
}.iconfont{font-family:"iconfont" !important;font-size: 1.5rem;font-style: normal;-webkit-font-smoothing: antialiased;-webkit-text-stroke-width: 0.2px;-moz-osx-font-smoothing: grayscale;color: #fff;
}header h3 {font-size: 0.5rem;line-height: 1.3rem;
}header p {font-size: 0.3rem;
}.singer {width: 8rem;height: 8rem;border: 1px solid #fff;margin: auto;border-radius: 50%;
}.singer div {width: 7.6rem;height: 7.6rem; margin: .2rem;border-radius: 50%;background: rgba(255, 255, 255, .5);
}.rotate {animation: rot 10s linear infinite;
}@keyframes rot {to {transform: rotate(360deg);}
}.singer div img {width: 7rem;height: 7rem;border-radius: 50%;margin: 0.3rem;
}.progress {width: 9rem;height: 0.1rem;background: #c03;margin: 1rem auto;
}.bg {width: 0;height: 0.1rem;background: #0f9
}.bar {width: .2rem;height: .2rem;background: blue;border-radius: 50%;transform: translate(0rem, -.15rem); /* 代替绝对定位 */
}.btn {width: 8rem;margin: auto;
}.btn div {float: left;margin: .5rem;
}.pause {display: none;
}
- 点击按钮实现播放/暂停功能。
var oPlay = document.getElementsByClassName("play")[0];
var oPause = document.getElementsByClassName("pause")[0];
点击实现播放/暂停:
/* 点击实现播放功能 */
oPlay.onclick = function () { myMusic.play();oPause.style.display = "block";this.style.display = "none";oSinger.className = "singer rotate";
};/* 点击实现暂停功能 */
oPause.onclick = function () {myMusic.pause();oPlay.style.display = "block";this.style.display = "none";oSinger.className = "singer";
};
- 进度条功能的实现:
/* 进度条功能 */
var w = oProgress.offsetWidth - oBar.offsetWidth; //计算小滑块可移动的范围
myMusic.addEventListener("timeupdate", function () {var s = this.currentTime/this.duration; //当前时间/总时间oBar.style.transform = "translate("+s*w +"px, -0.15rem)"; //滑块随音乐移动oBg.style.width = s*w + "px";
});
其中:
currentTime:当前播放的时间
duration:音乐的总时间
//触屏事件拖拽进度条
var x = 0, l = 0, _left = 0;
oBar.addEventListener("touchstart", function (e) {var x = e.changedTouches[0].pageX; //获取手指按下去的位置document.addEventListener("touchmove", move);document.addEventListener("touchend", function () { //触屏结束后需要解绑触屏事件l = _left;});
});function move(e) {var x1 = e.changedTouches[0].pageX;var _left = x1 -x + l;if (_left < 0) {_left = 0;} else if (_left > w) {_left = w;}oBar.style.transform = "translate("+_left+"px, -0.15rem)";oBg.style.width = _left + "px";myMusic.currentTime = _left/w*myMusic.duration;
}
touchstart:触屏开始事件
changedTouches:触发事件的手指列表数
触发事件结束需要解绑事件(touchend)
硬件加速:是投影,没有重新渲染dome
//自动播放下一曲
myMusic.addEventListener("ended", function (e){n ++;if (n > 4) {myMusic.pause();myMusic.src = "";oSinger.className = "singer";oBg.style.width = 0;oBar.style.transform = "translate("+0+"px, -0.15rem)";oPlay.style.display = "block";oPause.style.display = "none";}myMusic.src = "mp3/" +musicList[n];myMusic.play();
});
//用于显示当前播放的歌曲名
myMusic.addEventListener("canplay", function () {oMusicTitle.innerHTML = musicList[n];
});
canplay事件:指可以播放。也就是在歌曲播放过程的事件。
window.onload = function () {var myMusic = document.getElementById("myMusic");var oPlay = document.getElementsByClassName("play")[0];var oPause = document.getElementsByClassName("pause")[0];var oProgress = document.getElementsByClassName("progress")[0];var oBar = document.getElementsByClassName("bar")[0];var oBg = document.getElementsByClassName("bg")[0];var oSinger = document.getElementsByClassName("singer")[0];var oPrve = document.getElementsByClassName("prev")[0];var oNext = document.getElementsByClassName("next")[0];var oMusicTitle = document.getElementsByClassName("musicTitle")[0];/* 点击实现播放功能 */oPlay.onclick = function () { myMusic.play();oPause.style.display = "block";this.style.display = "none";oSinger.className = "singer rotate";};/* 点击实现暂停功能 */oPause.onclick = function () {myMusic.pause();oPlay.style.display = "block";this.style.display = "none";oSinger.className = "singer";};/* 进度条功能 */var w = oProgress.offsetWidth - oBar.offsetWidth; //计算小滑块可移动的范围myMusic.addEventListener("timeupdate", function () {var s = this.currentTime/this.duration; //当前时间/总时间oBar.style.transform = "translate("+s*w +"px, -0.15rem)"; //滑块随音乐移动oBg.style.width = s*w + "px";});//触屏事件拖拽进度条var x = 0, l = 0, _left = 0;oBar.addEventListener("touchstart", function (e) {var x = e.changedTouches[0].pageX; //获取手指按下去的位置document.addEventListener("touchmove", move);document.addEventListener("touchend", function () {l = _left;});});function move(e) {var x1 = e.changedTouches[0].pageX;var _left = x1 -x + l;if (_left < 0) {_left = 0;} else if (_left > w) {_left = w;}oBar.style.transform = "translate("+_left+"px, -0.15rem)";oBg.style.width = _left + "px";myMusic.currentTime = _left/w*myMusic.duration;}//用数组保存音乐var musicList = ["儿童歌曲-捉泥鳅.mp3", "李茂山-迟来的爱.mp3", "宋祖英-好日子.mp3","谭嘉仪-小幸运.mp3", "王菲-爱不可及.mp3"];var n = 0; //索引//页面加载完成后显示的歌曲oMusicTitle.innerHTML = musicList[n];myMusic.src = "mp3/"+ musicList[n];if (myMusic.currentTime > myMusic.duration) {n ++;myMusic.src = "mp3/"+ musicList[n];myMusic.play();}//上一曲功能oPrve.onclick = function () {n --;if (n < 0) {n = 4;}myMusic.src = "mp3/"+ musicList[n];myMusic.play();oSinger.className = "singer rotate";oPause.style.display = "block";oPlay.style.display = "none";};//下一曲功能oNext.onclick = function () {n++;if (n > 4) {n = 0;}myMusic.src = "mp3/" +musicList[n];myMusic.play();oSinger.className = "singer rotate";oPause.style.display = "block";oPlay.style.display = "none";};//自动播放下一曲myMusic.addEventListener("ended", function (e){n ++;if (n > 4) {myMusic.pause();myMusic.src = "";oSinger.className = "singer";oBg.style.width = 0;oBar.style.transform = "translate("+0+"px, -0.15rem)";oPlay.style.display = "block";oPause.style.display = "none";}myMusic.src = "mp3/" +musicList[n];myMusic.play();});//用于显示当前播放的歌曲名myMusic.addEventListener("canplay", function () {oMusicTitle.innerHTML = musicList[n];});
};
个人小作品之迷你音乐播放器(移动端)相关推荐
- 用js创建audio对象实现网页迷你音乐播放器
主要是靠咋没的audio对象,我就不多说废话了,也不会说,直接上代码: HTML <!DOCTYPE html> <html><head><meta http ...
- Flash版(迷你音乐播放器mp3Player1.0 Beta1 )附源码
迷你音乐播放器mp3Player1.0 Beta1 ================= //What's new: 主要功能特色: 1.支持歌曲名称,歌手名称以及专辑等关键字搜索. 2.支持随机搜索 ...
- C#、.NET迷你音乐播放器
闲来没事自己做了一个基于WindowsMediaPlayer的迷你音乐播放器,界面如下图 功能简介: 1.循环模式:顺不播放 axWMusicPlayer.settings.setMode(" ...
- 迷你音乐播放器v1.0正式上线!
迷你音乐播放器V1.0正式上线! 版本介绍: 1.随机播放切换开关(通过点击专辑图片) 2.通过拖动歌曲名及艺术家名调整歌曲播放进度 3.手机浏览访问支持熄屏播放 4.暂不支持在线搜索功能 快来一起分 ...
- 使用小程序制作一个音乐播放器
此文主要通过小程序制作一个音乐播放器,实现轮播.搜索.播放.快进.暂停.上一曲.下一曲等功能. 一.创建小程序 二.设计页面 三.接口渲染 一.创建小程序 访问微信公众平台,点击账号注册. 选择小程序 ...
- Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3)
Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3) Android桌面小部件AppWidget比较常用的场景就是音乐播放器,音乐播放器虽然通常在后台播放,但需要 ...
- Android 小项目之--Mini音乐播放器【简单版】(附源码)
上篇文章讲服务的例子中,有个演示服务的后台播放音乐,今天就来讲一讲多媒体之一的音乐播放. 说到多媒体不得不向上追溯,空间多媒体是如何实现的,如何可以让我们轻松的播放音乐.视频?本章讲述点大致如下: 1 ...
- 微信小程序开发之音乐播放器
学习目标: 利用小程序实现音乐播放器页面布局. 显示当前播放音乐的封面图.标题.作者的信息. 实现音乐的播放.暂停.上一曲.下一曲的功能. 学习内容: 创建小程序工程项目 音乐播放器页面布局与样式解读 ...
- 微信小程序——【云音乐播放器】
目录 第一章 开发准备 一.项目结构 二.新建微信小程序项目 第二章 标签页切换 一.常用组件介绍 二.编写页面结构和样式 第三章 音乐推荐 一.组件介绍 二.编写音乐推荐页面结构和样式 第四章 播放 ...
最新文章
- 如何从多个项目创建 ASP.NET 应用程序以进行组开发
- 我非要捅穿这 Neutron(四)Open vSwitch in Neutron
- boost::describe模块实现嵌套枚举的测试程序
- 解决VS2015 VBCSCompiler.exe 占用CPU100%的问题
- js中this关键字的使用
- Windows系统CUDA10.2+CUDNN安装教程
- 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常
- 【牛客 - 373C】抓捕盗窃犯(连通图,思维,dfs 或 并查集)
- 算法高级(6)-共识(Raft)算法
- java怎么看提示错误,Mabatis错误提示Parameter index out of range的处理方法
- Table_Vue table 表格中显示内容过长显示省略号_并且显示提示---SpringCloud Alibaba_若依微服务框架改造_前端ElementUI---工作笔记010
- php 删除最后一个空数组,php删除空数组
- oracle 归档日志激增,一次归档日志激增的分析.
- Foreach In(C#)
- vue 开发App监听手机 返回键返回上级路由以及退出
- java识别手写文字_Java 实现OCR 识别图像文字(手写中文)----tess4j
- 四种常见的XML解析方式
- clone远程代码 在不同电脑上git_Git 同一电脑配置多个远程仓库
- 什么是“天道左旋、地道右旋”?
- Javaweb基础配置模板(mybatis+javaweb)