原生js制作播放器
以前 就想做一个播放器,一直没狠下心来,今天终于狠下心来,把这个做出来了(因为有点无聊)
做这个播放器 也百度了一下, 你叫我做,我肯定做不出来, 就算用jquery 我也做不出来. 以前也用过audio控件,但是只不过绑定src 再来个loop
这个播放器就做完了
今天,来一个比较好看的
效果图
<div class="photo">
<div class="title">种种<span style="font-size:10px;">_陈粒</span></div> <div class="play" title="暂停"></div>
<div class="lrc">
<div class="words"></div>
</div>
<audio src=" http://sc1.111ttt.cn/2015/5/10/11/103111444123.mp3" loop="loop" id="myMusic"></audio>
<!--音频标签-->
</div>
做音乐播放器
使用audio
我做了一个 播放 暂停 图片旋转,还有个歌词,其他都没弄了
说一下这里的重难点
这里图片旋转是用css3的animation 做的
.play.rotate {
-webkit-animation: rot 5s linear infinite;
-moz-animation: rot 5s linear infinite;
-ms-animation: rot 5s linear infinite;
-o-animation: rot 5s linear infinite;
animation: rot 5s linear infinite; /*css3自定义动画*/
}
@keyframes rot {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
找一个lrc歌词
放入到文本域
<textarea id="txt" style="display: none;">
[00:00.79]种种 - 陈粒
[00:01.49]词:张小蜀 曲:陈粒 [00:06.93]你是我梦里
[00:08.53]陌生 熟悉
[00:10.98]与众不同
[00:13.81]你是我梦里
[00:15.34]幻想 现实
[00:17.88]不灭星空
[00:20.57]眼睛
[00:21.59]彩色是你
[00:24.15]黑白是你
[00:28.08]低落 欢欣
[00:31.36]有始不见终
[00:35.08]你是我梦里
[00:36.90]失去 得到
[00:39.26]欲望失宠
[00:42.16]你是我梦里
[00:44.07]迟疑 果断
[00:46.35]思想牢笼
[00:48.88]耳朵
[00:49.73]沉默是你
[00:52.59]呼啸是你
[00:56.62]分裂退化
[00:59.64]脚底悬空
[01:03.51]你是我梦里
[01:05.46]孤寂 热闹
[01:07.74]来去匆匆
[01:10.41]你是我梦里
[01:12.20]虚妄 真实
[01:14.76]午夜霓虹
[01:17.34]胃里
[01:18.19]苍凉是你
[01:21.13]炙热是你
[01:25.45]填满 掏空
[01:27.85]会不会不同
[01:32.24]你是我三十九度的风
[01:35.35]风一样的梦
[01:39.40]汇集 失散
[01:41.94]感受在消融
[01:46.55]梦里你是梦
[01:49.57]越梦越空
[01:54.10]越空
[01:55.60]越爱做
[01:57.98]关于你的梦
[02:02.02]
</textarea>
歌词Lrc
通过点击图片 使歌曲播放 而歌曲是在audio 控件中 所有要来个点击事件 简介的使audio播放
var btn = document.getElementsByClassName("play")[0];//通过class类名去获取元素 数组的形式储存 [] 点击 播放 再点击 暂停
var myMusic = document.getElementById("myMusic");//通过ID 获取audio
var mark = true;//布尔值 true真 false假
btn.onclick = function () {
if (mark)//隐式转换 i > 1
{
this.className += " rotate";
myMusic.play();//播放音乐
myMusic.volume = 0.4; //音量
mark = false;
} else {
this.className = "play";
myMusic.pause();//音乐暂停
mark = true;
}
};
现在 基本上 已经可以播放了
那么我们把歌词 放到 div 为class 的words 当中
所以 要获取 文本域
var txt = document.getElementById("txt");
使用 console 输出

但是我们不是要这种格式的 ,我们只需要时间 所以 要 分割
var lrc = txt.value.split("[");

循环输出 在分割一下
for (var i = 0; i < lrc.length; i++) {
var lrcArrly = lrc[i].split("]");
console.log(lrc[i]) //分割时分,秒
// console.log(ms);
//console.log(lrcArrly[1]); 歌词
i
}
};

就是这样
接下来需要放在 words下面
var html = "";
html += "<p id=" + ms + ">" + lrcArrly[1] + "</P>";
words.innerHTML = html;

前面我们看见 时间格式是这样的 
而audio 的 addEventListener 方法 输出的时间是这个

我们要转 时间格式
分割
var time = lrcArrly[0].split("."); //分割时分,秒
var times = time[0].split(":");
// console.log(times[0]) //分割时,分
var ms = times[0] * 60 + times[1] * 1; //分钟转换为秒 × 60 times[1] 是秒数,×1 表示 string转换为int类型
输出一下

正确了但是addEventListener 方法的时间 格式太精确了
我们也要转一下
var currentTimes = parseInt(this.currentTime); //取整
输出对比

现在时间 就转好了
myMusic.addEventListener("timeupdate", function () {
// timeupdate 是时间变换
// 输出时间变换:console.log(this.currentTime); 1.300000
console.log(this.currentTime);
var currentTimes = parseInt(this.currentTime); //取整
console.log(currentTimes);
});
时间 转换 好了 歌词 也放好了

我们 想要鼠标移入歌词,出现时间

html += "<p id=" + ms + " title=[" + lrc[i] + ">" + lrcArrly[1] + "</P>"; // 给他个id 是想偷懒 自动生成 不用 设置其他的了
想要他 唱的时候 歌词 移动

鼠标监听的 事件中添加
这里和图片轮盘的实现方法差不多,一个大的div 包裹一个div 大的div 隐藏溢出的 div 的内容
div 向上移动
//aidio监听播放进度 发生变化,就触发函数
myMusic.addEventListener("timeupdate", function () {
// 输出时间变换:console.log(this.currentTime); 1.300000
console.log(this.currentTime);
var currentTimes = parseInt(this.currentTime); //取整
console.log(currentTimes);
if (document.getElementById(currentTimes)) { // 当前的 该颜色,非当前就改为以前颜色
for (var i = 0; i < Ps.length; i++) {
Ps[i].style.color = "gray";
Ps[i].style.fontSize = "10px";
}
document.getElementById(currentTimes).style.color = "red";
document.getElementById(currentTimes).style.fontSize = "18px"; if (Ps[num].id == currentTimes) {
words.style.top = -15* num + "px"; if (num>=58) {
num = 0;
}
num++;
}
}
});
这个就是使用原生js做的播放器
可以看这里的视频 :http://www.iqiyi.com/w_19ru5adg61.html
下面是源码
<textarea id="txt" style="display: none;">
[00:00.79]种种 - 陈粒
[00:01.49]词:张小蜀 曲:陈粒 [00:06.93]你是我梦里
[00:08.53]陌生 熟悉
[00:10.98]与众不同
[00:13.81]你是我梦里
[00:15.34]幻想 现实
[00:17.88]不灭星空
[00:20.57]眼睛
[00:21.59]彩色是你
[00:24.15]黑白是你
[00:28.08]低落 欢欣
[00:31.36]有始不见终
[00:35.08]你是我梦里
[00:36.90]失去 得到
[00:39.26]欲望失宠
[00:42.16]你是我梦里
[00:44.07]迟疑 果断
[00:46.35]思想牢笼
[00:48.88]耳朵
[00:49.73]沉默是你
[00:52.59]呼啸是你
[00:56.62]分裂退化
[00:59.64]脚底悬空
[01:03.51]你是我梦里
[01:05.46]孤寂 热闹
[01:07.74]来去匆匆
[01:10.41]你是我梦里
[01:12.20]虚妄 真实
[01:14.76]午夜霓虹
[01:17.34]胃里
[01:18.19]苍凉是你
[01:21.13]炙热是你
[01:25.45]填满 掏空
[01:27.85]会不会不同
[01:32.24]你是我三十九度的风
[01:35.35]风一样的梦
[01:39.40]汇集 失散
[01:41.94]感受在消融
[01:46.55]梦里你是梦
[01:49.57]越梦越空
[01:54.10]越空
[01:55.60]越爱做
[01:57.98]关于你的梦
[02:02.02]
</textarea> <div class="photo">
<div class="title">种种<span style="font-size:10px;">_陈粒</span></div> <div class="play" title="暂停"></div>
<div class="lrc">
<div class="words"></div>
</div>
<audio src=" http://sc1.111ttt.cn/2015/5/10/11/103111444123.mp3" loop="loop" id="myMusic"></audio>
<!--音频标签-->
</div>
html部分
</body>
<script type="text/javascript"> var num = 0;
var btn = document.getElementsByClassName("play")[0];//通过class类名去获取元素 数组的形式储存 [] 点击 播放 再点击 暂停
var myMusic = document.getElementById("myMusic");//通过ID 获取audio
var words = document.getElementsByClassName("words")[0];
var mark = true;//布尔值 true真 false假 btn.onclick = function () {
if (mark)//隐式转换 i > 1
{
this.className += " rotate";
myMusic.play();//播放音乐
myMusic.volume = 0.4;
mark = false;
} else {
this.className = "play";
myMusic.pause();//音乐暂停
mark = true;
}
};
var txt = document.getElementById("txt");
var lrc = txt.value.split("[");
// console.log(txt.value); var html = "";
//循环遍历 出歌词
for (var i = 0; i < lrc.length; i++) {
var lrcArrly = lrc[i].split("]");
var time = lrcArrly[0].split(".");
// console.log(lrc[i]) //分割时分,秒 var times = time[0].split(":");
// console.log(times[0]) //分割时,分 var ms = times[0] * 60 + times[1] * 1; //分钟转换为秒 × 60 times[1] 是秒数,×1 表示 string转换为int类型 // console.log(ms);
// console.log(lrcArrly[1]); // 歌词 if (lrcArrly[1]) { //判断是否存在 存在进入
html += "<p id=" + ms + " title=[" + lrc[i] + ">" + lrcArrly[1] + "</P>"; }
words.innerHTML = html;
// console.log(words.innerHTML);
};
//获取所有的p标签
var Ps = document.getElementsByTagName("p");
//aidio监听播放进度 发生变化,就触发函数
myMusic.addEventListener("timeupdate", function () {
// 输出时间变换:console.log(this.currentTime); 1.300000
console.log(this.currentTime);
var currentTimes = parseInt(this.currentTime); //取整
console.log(currentTimes);
if (document.getElementById(currentTimes)) { // 当前的 该颜色,非当前就改为以前颜色
for (var i = 0; i < Ps.length; i++) {
Ps[i].style.color = "gray";
Ps[i].style.fontSize = "10px";
}
document.getElementById(currentTimes).style.color = "red";
document.getElementById(currentTimes).style.fontSize = "18px"; if (Ps[num].id == currentTimes) {
words.style.top = -15* num + "px"; if (num>=58) {
num = 0;
}
num++;
}
}
}); </script>
<style type="text/css">
* {
margin:;
padding:;
} body {
background: rgb(55, 76,86);
} .photo {
width: 240px;
height: 240px;
margin: 100px auto;
font-family: "微软雅黑";
padding: 5px;
border-radius: 20px;
box-shadow: 0 0 7px#fff;
overflow: hidden;
} .title {
width: 240px;
height: 30px;
/*background:url("images/2.png")no-repeat;*/
font-size: 20px;
color: #ccc;
font-weight: bold;
text-align: center;
line-height: 30px;
} .play {
width: 80px;
height: 80px;
background: url("http://p1.music.126.net/lN2jt4Vkqw3zzIjc2JjyCw==/2532175280981641.jpg?param=130y130")no-repeat;
margin: auto;
border-radius: 50% 50%;
cursor: pointer;
} .lrc {
width: 200px;
height: 100px;
margin: 20px auto;
text-align: center;
font-size: 10px;
overflow: hidden;
color: #ccc;
} .words {
position: relative;
left: 0px;
} .play.rotate {
-webkit-animation: rot 5s linear infinite;
-moz-animation: rot 5s linear infinite;
-ms-animation: rot 5s linear infinite;
-o-animation: rot 5s linear infinite;
animation: rot 5s linear infinite; /*css3自定义动画*/
} @keyframes rot {
from {
transform: rotate(0deg);
} to {
transform: rotate(360deg);
}
}
</style>
这就是 使用原生js 做一个简单的播放器
原生js制作播放器的更多相关文章
- 使用 原生js 制作插件 (javaScript音乐播放器)
1.引用页面 index.html <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- js插件---10个免费开源的JS音乐播放器插件
js插件---10个免费开源的JS音乐播放器插件 一.总结 一句话总结:各种插件都有很多,多去找. 二.js插件---10个免费开源的JS音乐播放器插件 亲测可用 音乐播放器在网页设计中有时候会用到, ...
- Asp.Net MVC中Aplayer.js音乐播放器的使用
1.前言: Aplater.js是一款可爱.漂亮的Js音乐播放器,以前就了解过也弄过一些,现在就用mp3的格式来在.Net里面开发.管网 https://aplayer.js.org/ 2.入手: 在 ...
- 利用css+原生js制作简易钟表
利用css+原生js制作简单的钟表.效果如下所示 实现该效果,分三大块:html.javascript.css html部分html部分比较简单,定义一个clock的div,内部有原点.时分秒针.日期 ...
- 基于jplayer实现歌词同步的JS音乐播放器效果
分享一款基于jplayer实现歌词同步的JS音乐播放器效果.这是一款基于jQuery实现的音乐播放器功能代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <textare ...
- 10个免费开源的JS音乐播放器插件
点这里 音乐播放器在网页设计中有时候会用到,比如一些时尚类.音乐或影视类等项目,但这些 网页播放器 插件比较少见,所以这里为大家整理一个集合,也许会有用到的时候. 下面整理的播放器有些是支持自适应的, ...
- Wavesurfer.js音频播放器插件的使用教程
Wavesurfer.js是一款基于HTML5 canvas和Web Audio的音频播放器插件,本文主要记录它及其视觉效果插件Regions插件的使用方法. 1.创建实例 引入插件 import W ...
- EasyPlayer.js H5播放器帮助我这种不会前端的普通用户也能轻松实现直播接入
说到EasyPlayer.js,先得说一下EasyPlayer到底是啥, An elegant, simple, fast android RTSP/RTMP/HLS/HTTP Player.Easy ...
- js 音乐播放器
在写之前先说下我遇到得两个问题,第一个问题是,在音乐标签,我希望得是切换数据做到得,但是出了问题,暂时为解决,第二个问题,页面切换时音乐继续播放由卡顿情况,未处理好. 好了,那我们开始做这个音乐播放器 ...
随机推荐
- 神经网络(NN)实现多分类-----Keras实现
IRIS数据集介绍 IRIS数据集(鸢尾花数据集),是一个经典的机器学习数据集,适合作为多分类问题的测试数据,它的下载地址为:http://archive.ics.uci.edu/ml/machi ...
- Redfish技术介绍
1.1 概述 Redfish是一种基于HTTPs服务的管理标准,利用RESTful接口实现设备管理.每个HTTPs操作都以UTF-8编码的JSON格式(JSON是一种key-value对的数据格式) ...
- Scrapy五大核心组件工作流程
一.Scrapy五大核心组件工作流程 1.核心组件 # 引擎(Scrapy) 对整个系统的数据流进行处理, 触发事务(框架核心). # 调度器(Scheduler) 用来接受引擎发过来的请求. 由过滤 ...
- ArcMap 制作广州 18 级地图切片需要多少时间?
制作地图切片包会随着级别的上升,瓦片数量会指数级地上升,所需的计算时间也是指数级的. 但是 ArcMap 并不会提示时间信息,只有一个圈没完没了地转... 就在这无聊地等待中,我写了这篇帖子. 电脑配 ...
- imregionalmax imregionalmin imextendedmax imextendedmin imhmax imhmin 函数的详解 matlab中函数
BW = imregionalmax(I): 该函数获得灰度图像 I 的局部极大值,返回值BW为和原图像大小相同的二值图像,BW中元素1对应极大值,其他元素为0 BW = imregionalmax( ...
- 什么是ECS?
- 最新 科大讯飞java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.科大讯飞等10家互联网公司的校招Offer,因为某些自身原因最终选择了科大讯飞.6.7月主要是做系统复习.项目复盘.Leet ...
- 《你必须知道的495个C语言问题》读书笔记之第1-2章:声明和初始化
1. C标准中并没有精确定义数值类型的大小,但作了以下约束: (1) char类型可以存放小于等于127的值: (2) short int和int可以存放小于等于32767的值: (3) long i ...
- [转]史上最最最详细的手写Promise教程
我们工作中免不了运用promise用来解决异步回调问题.平时用的很多库或者插件都运用了promise 例如axios.fetch等等.但是你知道promise是咋写出来的呢? 别怕-这里有本promi ...
- ros msg和srv使用
在包文件中新建文件夹srv和msg,在这两个文件夹中新建test.msg,test.srv 修改apckage.xml 添加以下内容 <build_depend>:message_gene ...