用JS实现歌词与播放音乐同步
用JS实现歌词与播放音乐同步
第一步:把歌词解析成JS对象
参看我的上一篇文章:用JS解析LRC格式的歌词
解析后的歌词写到页面的一个列表中,效果如下:
主要HTML代码:
<!-- 播放器 -->
<audio id="audio" src="media/沙漠骆驼 - 展展与罗罗.mp3" controls preload="auto"></audio>
<!-- 歌词 -->
<div class="lyric_area"><ul id="lyric"></ul>
</div>
CSS:
.lyric_area{/*歌词显示区域*/height: 300px; /*歌词区域高度*/overflow: hidden; /*隐藏超出部分*/margin-top: 15px;
}
#lyric{/*歌词列表*/line-height: 20px;/*行高,这个值要用在歌词滚动距离上*/transition-duration: 600ms;/*滚动速度*/}
#lyric .lineHigh{/*高亮行*/color: red;
}
第二步:播放音乐时让当前行高亮显示并向上滚动
解析后的歌词放在oLRC对象的ms数组中,呈现以下形态:
ms : [
{t: “0.590”, c: “沙漠骆驼 - 展展与罗罗”}
{t: “2.970”, c: “词:展展与罗罗”}
{t: “4.460”, c: “曲:展展与罗罗”}
{t: “26.450”, c: “我要穿越这片沙漠”}
{t: “28.510”, c: “找寻真的自我”}
{t: “30.500”, c: “身边只有一匹骆驼陪我”}
… …
]
ms[i].t是歌词的开始时间,ms[i].c是歌词内容。
现在歌词内容已经写在上面的<ul>列表中了,我们要做的是让高亮歌词与播放同步。
var lineNo: 0, //当前行
var C_pos: 6, //C位
var offset: -20, //滚动距离(应等于行高)
var audio = document.getElementById("audio");//播放器
var ul = document.getElementById("lyric"); //歌词容器列表//高亮显示歌词当前行及文字滚动控制,行号为lineNo
function lineHigh() {var lis = ul.getElementsByTagName("li");//歌词数组if(lineNo>0){lis[lineNo-1].removeAttribute("class");//去掉上一行的高亮样式}lis[lineNo].className = "lineHigh";//高亮显示当前行//文字滚动if(lineNo>C_pos){ul.style.transform = "translateY("+(lineNo-C_pos)*offset+"px)"; //整体向上滚动一行高度}
}//滚回到开头,用于播放结束时
function goback() {document.querySelector("#lyric .lineHigh").removeAttribute("class");ul.style.transform = "translateY(0)";lineNo = 0;
}//监听播放器的timeupdate事件,实现文字与音频播放同步
audio.ontimeupdate = function () {if(lineNo==oLRC.ms.length)return;var curTime = audio.currentTime; //播放器时间if(parseFloat(oLRC.ms[lineNo].t)<=curTime){lineHigh();//高亮当前行lineNo++;}
};//监听播放器的ended事件,播放结束时回滚歌词
audio.onended = function () {goback(); //回滚歌词
};
歌词与播放同步的关键是从播放器获取当前时间,这需要监听audio对象的timeupdate事件,该事件在播放位置发生变化时触发,再从audio对象的currentTime属性中可取到当前播放时间。
滚动歌词使用的是CSS的变换函数transform:translateY(长度),它可以把歌词容器整体上移指定长度,由于容器外的div标签设置了overflow: hidden;,所以感觉歌词在向上滚动了。
用JS实现歌词与播放音乐同步相关推荐
- python播放音乐同步歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码
使用python扫描本地音乐并下载歌词 这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀.... 先简单的说下吧,百度提供了一个音乐搜索的a ...
- python播放音乐同步歌词范晓萱_范晓萱同步的歌词
你是不是在找范玮琪的这首同步的歌词?下面是学习啦!小编帮你整理了这首歌词的相关的资料希望对你有用! 同步的歌词 同步-(电影<陪安东尼度过漫长岁月>主题曲)-范晓萱 相隔两地的时空 默契对 ...
- python播放音乐同步歌词_python 根据歌词的时间(LRC文件),生成H5 audio按句播放器...
1.效果图 2.Python代码: # coding=UTF-8 import codecs import os import re # 正则校验是否为浮点数字 def is_number(num): ...
- python播放音乐同步歌词_linux 下 python 调用 mplayer 解析歌词同步播放显示
标签: 加载同目录同名歌词同步显示 #!/usr/bin/python # -*- coding: utf-8 -*- import sys, os, time, subprocess, re, ch ...
- python播放音乐同步歌词范晓萱_范晓萱《同步》歌词-同步Mp3歌词下载_爱歌词网...
同步LRC歌词 [ti:同步] [ar:范晓萱] [al:] [by:agul369] [00:01.77]范晓萱 - 同步(陪安东尼度过漫长岁月电影主题曲) [00:10.00]歌词搜索www.22 ...
- python播放音乐同步歌词范晓萱_同步_范晓萱_高音质在线试听_同步歌词|歌曲下载_酷狗音乐...
范晓萱 - 同步 专辑: 同步 歌手: 范晓萱 [id:$010126C0] [ar:范晓萱] [ti:同步] [by:] [hash:d71f1a9610608a9caf43609ffd37686 ...
- python播放音乐同步歌词_python终端播放音乐同定制步显示本地或网络歌词
文章来源:淘论文网 发布者:毕业设计 浏览量: #!/usr/bin/python # -*- encoding:utf-8 -*- #============================== ...
- js倒计时结束后播放音乐html5,js实现简单的倒计时
这篇文章主要为大家详细介绍了js实现简单的倒计时,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了js实现简单倒计时的具体代码,供大家参考,具体内容如 ...
- js倒计时结束后播放音乐html5,倒计时到HTML5视频结束(Countdown to the end of the HTML5 video)...
倒计时到HTML5视频结束(Countdown to the end of the HTML5 video) 我可以倒数到HTML5视频的结尾吗? Video ends after XX second ...
最新文章
- 【机器学习】机器学习算法优缺点对比(汇总篇)
- Apache Beam的架构概览
- Android 6.0 运行时权限处理完全解析
- MATLAB的iptcheckinput函数详解
- 常见Java面试题之JVM加载class文件的原理机制
- 在log4j中使用自定义的Appender
- [Jarvis OJ - PWN]——Backdoor
- P3834-【模板】可持久化线段树 1(主席树)
- 一次U3D DLL加密的记录(二)
- android studio运行项目快捷键,Android Studio 快捷键大全
- Flash优秀学习资源下载总汇!(不断更新)
- fabao_get.y
- 机器人主流编程语言盘点 及优缺点分析
- 【Python】 使用 xlwt 保存 excel 文件无效 解决
- vcf格式文件转化为Excel(csv)格式文件(R语言的write.csv,write.table功能,Excel表的文件导入功能)...
- html复习第六天 京东首页布局(导航栏/左侧)
- UE4打包项目部署到Quest遇到的问题
- JavaScript进阶(一)
- 送福利 手把手教你快速配置腾讯云 Linux 服务器
- ismobile什么意思_英语mobile是什么中文意思