基于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 相关文章推荐
对象的类型:本地对象(1)
Dec 29 Javascript
javascript 控制弹出窗口
Apr 10 Javascript
$.ajax返回的JSON无法执行success的解决方法
Sep 09 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
Jun 26 Javascript
javascript实现复选框超过限制即弹出警告框的方法
Feb 25 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
Aug 27 Javascript
javascript实现九宫格相加数值相等
May 28 Javascript
Node.js的Express框架使用上手指南
Mar 12 Javascript
JS正则匹配中文的方法示例
Jan 06 Javascript
three.js实现3D视野缩放效果
Nov 16 Javascript
JQuery复选框全选效果如何实现
May 08 jQuery
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 正则 过滤html 的超链接
2009/06/02 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
Jquery下的26个实用小技巧(jQuery tips, tricks &amp; solutions)
2010/03/01 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
python 实现Harris角点检测算法
2020/12/11 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
开服装店计划书
2014/08/15 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
java设计模式--三种工厂模式详解
2021/07/21 Java/Android