基于JavaScript怎么实现让歌词滚动播放


Posted in Javascript onNovember 03, 2015

各种音乐播放器上都有一个自动滚动播放歌词的功能,当前滚动到的歌词会高亮居中显示,即使歌词被换行也能正常居中,那么这个功能基于JavaScript怎么实现让歌词滚动播放呢?请看下文详解。

一般音乐播放器使用的歌词格式都是lrc,为了方便处理,我们这里使用XML格式的歌词。介绍一个网站:中文歌词库。它提供xml格式的歌词。

我们先来看一下这个例子的最终效果:

基于JavaScript怎么实现让歌词滚动播放

下面是基于jQuery的具体代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Player</title>
 <style type="text/css">
 #audio-wrapper{
  border:1px solid;
  text-align:center;
 }
 .activated{
  color:#33b;
  font-weight:bold;
  background:#ddf;
 }
 #lrc{
  text-align:center;
  width:360px;
  height:400px;
  overflow:hidden;
  border:2px solid #ddd;
  box-shadow:2px 2px 2px silver;
 }
 .lyrics-container{
  position:relative;
  width:99%;
  height:80%;
  border:1px solid red;
  overflow:hidden;
 }
 .lyrics-container2{
  position:absolute;
  width:355px;
 }
 #lrc p{
  text-indent:0;
  margin:0;
  padding:6px;
 }
 .music-title,.album,.artist{
  margin:0;
  padding:4px;
  text-indent:0;
  text-align:left;
 }
 </style>
 <script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
</head>
<body>
 <div id="#audio-wrapper">
  <p><audio src="data/aimei.mp3" controls></audio></p>
 </div>
 <div id="lrc"></div>
 <script type="text/javascript">
 $(document).ready(function(){
  var $lrc = $('#lrc');
  var html ='';
  $('audio').on('play',function(){
   var start = new Date();
   if($lrc.html() == ''){
    $.ajax({
     url:'data/aimei.xml',
     type:'get',
     dataType:'xml',
     success:function(data){
      html += '<div class="info">';
      if($(data).find('TITLE').length > 0){
       html += '<p class="music-title">歌曲:' + $(data).find('TITLE').text()+'</p>';
      }
      if($(data).find('ALBUM').length > 0){
       html += '<p class="album">专辑:' + $(data).find('ALBUM').text()+'</p>';
      }
      if($(data).find('ARTIST').length > 0){
       html += '<p class="artist">演唱:' + $(data).find('ARTIST').text()+'</p>';
      }
      html += '</div>';
      html += '<div class="lyrics-container">'
      html += '<div class="lyrics-container2">'
      $(data).find('LRC').each(function(){
       html += '<p class="lyrics" tag="'+ $(this).attr('TAG') +'">' + $(this).text() +'</p>';
      });
      html += '</div></div>';
      $lrc.html(html);
      //alert($(data).find('LRC').length);
     }
    });
   }
   var timer = setInterval(function(){
    var now = new Date();
    var elapsed = now - start;
    if($lrc.find('.lyrics').length){
     $lrc.find('.lyrics').each(function(){
      var isOK = elapsed - $(this).attr('tag');
      if(isOK < 13 && isOK > 0){
       $lrc.find('.lyrics').removeClass('activated');
       $(this).addClass('activated');
       if($(this).prevAll('.lyrics').length > 3){
        $('.lyrics-container2').animate({
         'top':'-=30px'
        });
        //console.log($(this).prevAll('.lyrics').length);
       }
      }
     });
    }    
   },10);
  });
 });
 </script>
</body>
</html>

以上内容是本文给大家详解的基于JavaScript怎么实现让歌词滚动播放的全部内容,希望大家喜欢。

Javascript 相关文章推荐
JavaScript语句可以不以;结尾的烦恼
Mar 08 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
Apr 16 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
Feb 20 Javascript
js实现显示手机号码效果
Mar 09 Javascript
详解如何用babel转换es6的class语法
Apr 03 Javascript
vue项目移动端实现ip输入框问题
Mar 19 Javascript
浅谈layer弹出层按钮颜色修改方法
Sep 11 Javascript
Vue Render函数创建DOM节点代码实例
Jul 08 Javascript
Angular性能优化之第三方组件和懒加载技术
May 10 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
Nov 03 #Javascript
Javascript设计模式理论与编程实战之简单工厂模式
Nov 03 #Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 #Javascript
jQuery实用技巧必备(中)
Nov 03 #Javascript
jQuery实用技巧必备(上)
Nov 02 #Javascript
jQuery zclip插件实现跨浏览器复制功能
Nov 02 #Javascript
JQuery zClip插件实现复制页面内容到剪贴板
Nov 02 #Javascript
You might like
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
php实现分页显示
2015/11/03 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
JS中递归函数
2016/06/17 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
Python 文件和输入输出小结
2013/10/09 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
简单实现python数独游戏
2018/03/30 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
Django封装交互接口代码
2020/07/12 Python
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
思想汇报范文
2013/11/04 职场文书
完整版商业计划书
2014/09/15 职场文书
大学生英文求职信范文
2015/03/19 职场文书
法律意见书范文
2015/05/20 职场文书
客户答谢会致辞
2015/07/30 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
node快速搭建后台的实现步骤
2022/02/18 NodeJs
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript