基于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实现重力弹跳拖拽运动效果示例
Jun 28 Javascript
JS实现消息来时让网页标题闪动效果的方法
Apr 20 Javascript
jquery动态添加文本并获取值的方法
Oct 12 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
Dec 18 Javascript
JS正则表达式之非捕获分组用法实例分析
Dec 28 Javascript
vue.js实例todoList项目
Jul 07 Javascript
Underscore之Array_动力节点Java学院整理
Jul 10 Javascript
基于JavaScript实现报警器提示音效果
Oct 27 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 25 Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 Javascript
js实现div色块拖动录制
Jan 16 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读注册表
2006/10/09 PHP
php的header和asp中的redirect比较
2006/10/09 PHP
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
pandas Dataframe行列读取的实例
2018/06/08 Python
使用numba对Python运算加速的方法
2018/10/15 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
Django分页功能的实现代码详解
2019/07/29 Python
Python 列表的清空方式
2020/01/13 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
学生旷课检讨书500字
2014/10/28 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
详解Redis基本命令与使用场景
2021/06/01 Redis