用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实现歌词与播放音乐同步相关推荐

  1. python播放音乐同步歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码

    使用python扫描本地音乐并下载歌词 这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀.... 先简单的说下吧,百度提供了一个音乐搜索的a ...

  2. python播放音乐同步歌词范晓萱_范晓萱同步的歌词

    你是不是在找范玮琪的这首同步的歌词?下面是学习啦!小编帮你整理了这首歌词的相关的资料希望对你有用! 同步的歌词 同步-(电影<陪安东尼度过漫长岁月>主题曲)-范晓萱 相隔两地的时空 默契对 ...

  3. python播放音乐同步歌词_python 根据歌词的时间(LRC文件),生成H5 audio按句播放器...

    1.效果图 2.Python代码: # coding=UTF-8 import codecs import os import re # 正则校验是否为浮点数字 def is_number(num): ...

  4. python播放音乐同步歌词_linux 下 python 调用 mplayer 解析歌词同步播放显示

    标签: 加载同目录同名歌词同步显示 #!/usr/bin/python # -*- coding: utf-8 -*- import sys, os, time, subprocess, re, ch ...

  5. python播放音乐同步歌词范晓萱_范晓萱《同步》歌词-同步Mp3歌词下载_爱歌词网...

    同步LRC歌词 [ti:同步] [ar:范晓萱] [al:] [by:agul369] [00:01.77]范晓萱 - 同步(陪安东尼度过漫长岁月电影主题曲) [00:10.00]歌词搜索www.22 ...

  6. python播放音乐同步歌词范晓萱_同步_范晓萱_高音质在线试听_同步歌词|歌曲下载_酷狗音乐...

    范晓萱 - 同步 专辑: 同步 歌手: 范晓萱 [id:$010126C0] [ar:范晓萱] [ti:同步] [by:] [hash:d71f1a9610608a9caf43609ffd37686 ...

  7. python播放音乐同步歌词_python终端播放音乐同定制步显示本地或网络歌词

    文章来源:淘论文网   发布者:毕业设计 浏览量: #!/usr/bin/python # -*- encoding:utf-8 -*- #============================== ...

  8. js倒计时结束后播放音乐html5,js实现简单的倒计时

    这篇文章主要为大家详细介绍了js实现简单的倒计时,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了js实现简单倒计时的具体代码,供大家参考,具体内容如 ...

  9. 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 ...

最新文章

  1. 【机器学习】机器学习算法优缺点对比(汇总篇)
  2. Apache Beam的架构概览
  3. Android 6.0 运行时权限处理完全解析
  4. MATLAB的iptcheckinput函数详解
  5. 常见Java面试题之JVM加载class文件的原理机制
  6. 在log4j中使用自定义的Appender
  7. [Jarvis OJ - PWN]——Backdoor
  8. P3834-【模板】可持久化线段树 1(主席树)
  9. 一次U3D DLL加密的记录(二)
  10. android studio运行项目快捷键,Android Studio 快捷键大全
  11. Flash优秀学习资源下载总汇!(不断更新)
  12. fabao_get.y
  13. 机器人主流编程语言盘点 及优缺点分析
  14. 【Python】 使用 xlwt 保存 excel 文件无效 解决
  15. vcf格式文件转化为Excel(csv)格式文件(R语言的write.csv,write.table功能,Excel表的文件导入功能)...
  16. html复习第六天 京东首页布局(导航栏/左侧)
  17. UE4打包项目部署到Quest遇到的问题
  18. JavaScript进阶(一)
  19. 送福利 手把手教你快速配置腾讯云 Linux 服务器
  20. ismobile什么意思_英语mobile是什么中文意思

热门文章

  1. 笔记:Linux环境C语言复习(16)// 网络
  2. 解决系统在大数据情况下如何导出文件(附代码)
  3. 宁做小三 不嫁穷人
  4. 〖Python 数据库开发实战 - MongoDB篇⑤〗- 安装和使用MongoDB客户端软件
  5. sqlite3:锁机制、stmt加速、wal日志模式、多进程并发、写互斥
  6. 如何在WordPress主机上搭建网站?
  7. 我看亨德利和奥沙利文(比较客观)
  8. 线上服务器Tomcat配置JVM参数
  9. 为什么网易, QQ 邮箱还有这么高的占有率?
  10. MSDN 离线安装包下载(微软官网)