用JS解析LRC格式的歌词,实现歌词同步滚动效果

用JS解析LRC格式的歌词,实现歌词同步滚动效果用 JS 解析 LRC 格式的歌词 1 把歌词载入 方法一 直接把歌词粘贴到一个 textarea 文本域中 然后把它设置为隐藏 LRC 歌词 textareaid lrc content cols 30 style display none ti 沙漠骆驼 ar 展展与罗罗 al 沙漠骆驼 by 0 offset 0 textareaid lrc content cols 30 style display none

用JS解析LRC格式的歌词

1、把歌词载入。

方法一:直接把歌词粘贴到一个textarea文本域中,然后把它设置为隐藏。

 
   

再用JS把歌词读出来:

 

方法二:用Ajax把后台的lrc文件载入。

var lrc = ""; function getLRC() { var ajax = new XMLHttpRequest(); ajax.open("GET", "media/沙漠骆驼 - 展展与罗罗.lrc"); ajax.onreadystatechange = function () { if (ajax.readyState == 4 && ajax.status == 200) { lrc = ajax.responseText; //console.log(lrc); createLrcObj(lrc); // 调用createLrcObj函数,并传入lrc参数 } }; ajax.send(null); } getLRC(); 

2、把LRC歌词解析为JS对象

代码如下:

var oLRC = { ti: "", //歌曲名 ar: "", //演唱者 al: "", //专辑名 by: "", //歌词制作人 offset: 0, //时间补偿值,单位毫秒,用于调整歌词整体位置 ms: [] //歌词数组{t:时间,c:歌词} }; function createLrcObj(lrc) { if(lrc.length==0) return; var lrcs = lrc.split('\n');//用回车拆分成数组 for(var i in lrcs) {//遍历歌词数组 lrcs[i] = lrcs[i].replace(/(^\s*)|(\s*$)/g, ""); //去除前后空格 var t = lrcs[i].substring(lrcs[i].indexOf("[") + 1, lrcs[i].indexOf("]"));//取[]间的内容 var s = t.split(":");//分离:前后文字 if(isNaN(parseInt(s[0]))) { //不是数值 for (var i in oLRC) { if (i != "ms" && i == s[0].toLowerCase()) { oLRC[i] = s[1]; } } }else { //是数值 var arr = lrcs[i].match(/\[(\d+:.+?)\]/g);//提取时间字段,可能有多个 var start = 0; for(var k in arr){ start += arr[k].length; //计算歌词位置 } var content = lrcs[i].substring(start);//获取歌词内容 for (var k in arr){ var t = arr[k].substring(1, arr[k].length-1);//取[]间的内容 var s = t.split(":");//分离:前后文字 oLRC.ms.push({//对象{t:时间,c:歌词}加入ms数组 t: (parseFloat(s[0])*60+parseFloat(s[1])).toFixed(3), c: content }); } } } oLRC.ms.sort(function (a, b) {//按时间顺序排序 return a.t-b.t; }); /* for(var i in oLRC){ //查看解析结果 console.log(i,":",oLRC[i]); }*/ } createLrcObj(lrc);

3、把解析后的歌词呈现在页面上

定义一个列表标签:

 
  

    用JS把歌词写到标签里面:

    function showLRC() { var s=""; for(var i in oLRC.ms){//遍历ms数组,把歌词加入列表 s+='
  • '+oLRC.ms[i].c+'
  • '; } document.getElementById("lyric").innerHTML = s; } showLRC();

    以上完毕。

    以下是结合这个页面加工后的完整代码:https://blog.csdn.net/yzy_csdn/article/details/

     
       
        
        带歌词歌曲 
         
         
        

    效果:

    用JS解析LRC格式的歌词,实现歌词同步滚动效果

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

    发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230179.html原文链接:https://javaforall.net

    (0)
    上一篇 2026年3月16日 下午2:57
    下一篇 2026年3月16日 下午2:57


    相关推荐

    • oracle查看视图定义语句_oracle视图总结

      oracle查看视图定义语句_oracle视图总结视图简介 视图是基于一个表或多个表或视图的逻辑表 本身不包含数据 通过它可以对表里面的数据进行查询和修改 视图基于的表称为基表 视图是存储在数据字典里的一条 select 语句 通过创建视图可以提取数据的逻辑上的集合或组合 视图的优点 1 对数据库的访问 因为视图可以有选择性的选取数据库里的一部分 2 用户通过简单的查询可以从复杂查询中得到结果 3 维护数据的独立性 试图可从多个表检索数据 4 对于

      2026年3月18日
      2
    • 微观察|“龙虾热”背后的“冷思考”

      微观察|“龙虾热”背后的“冷思考”

      2026年3月17日
      3
    • PC上安装多个操作系统

      目 录 第1章 绪论1 1.1目标1 1.2适宜的读者1 第2章 制作启动U盘2 2.1初级安装2 2.2启动分析3 2.3高级安装13 2.3.1分区13 2.3.2复制文件16 2.3.3…

      2022年4月4日
      55
    • 查询linux ssh端口,查看ssh端口「建议收藏」

      查询linux ssh端口,查看ssh端口「建议收藏」rpm-qa|grepssh可以看到系统中ssh安装包ps-ef|grepssh查看ssh服务有没有运行,如果有,可以看到类似以下内容:root26591018:31?00:00:00/usr/sbin/sshdroot27022618018:38pts/000:00:00grepssh这证明ssh已经在运行了,进程名为sshd如果没有运行,可以通过…

      2025年8月4日
      3
    • 漫画什么是分布式事务_分布式事务框架

      漫画什么是分布式事务_分布式事务框架点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!————— 第二天 —————————————————假如没有分布式事务在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子:上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要先调用库存服务,进行扣除库存,再调用订

      2025年8月9日
      3
    • java打印数组内容

      java打印数组内容在java中直接输出数组只能得到引用地址byte[]bytes={1,2,3,4,5};int[]ints={1,2,3,4,5};System.out.println(bytes);System.out.println(ints);输出[B@1b6d3586[S@4554617c打印数组内容publicstaticvoidmain(Stringargs

      2022年4月29日
      55

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注

    关注全栈程序员社区公众号