基于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 09 Javascript
jquery focus(fn),blur(fn)方法实例代码
Dec 16 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
AngularJS入门教程引导程序
Aug 18 Javascript
js中DOM三级列表(代码分享)
Mar 20 Javascript
微信小程序实现点击返回顶层的方法
Jul 12 Javascript
vuejs使用递归组件实现树形目录的方法
Sep 30 Javascript
vue中axios处理http发送请求的示例(Post和get)
Oct 13 Javascript
5分钟学会Vue动画效果(小结)
Jul 21 Javascript
详解如何为你的angular app构建一个第三方库
Dec 07 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
Apr 10 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 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导入Excel到MySQL的方法
2011/04/23 PHP
定义php常量的详解
2013/06/09 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
python中round函数如何使用
2020/06/19 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
前厅部经理岗位职责范文
2014/02/04 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
师范生见习报告范文
2014/11/03 职场文书
秦兵马俑导游词
2015/02/02 职场文书
家属联谊会致辞
2015/07/31 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
Python内置数据结构列表与元组示例详解
2021/08/04 Python
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS