基于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 相关文章推荐
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
Aug 15 Javascript
jQuery Jcrop插件实现图片选取功能
Nov 23 Javascript
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
jquery form表单序列化为对象的示例代码
Mar 05 Javascript
AngularJS HTML编译器介绍
Dec 06 Javascript
使用Plupload实现直接上传附件至七牛云存储
Dec 26 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
jquery实现图片随机排列的方法
May 04 Javascript
jquery动态添加文本并获取值的方法
Oct 12 Javascript
ionic中列表项增加和删除的实现方法
Jan 22 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
vue+mock.js实现前后端分离
Jul 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转换IP地址到真实地址的方法详解
2013/06/09 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
Django分组聚合查询实例分享
2020/04/29 Python
Python eval函数原理及用法解析
2020/11/14 Python
python FTP编程基础入门
2021/02/27 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
创先争优活动党员公开承诺书
2014/08/29 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
学校国庆节活动总结
2015/03/23 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
Redis如何实现分布式锁
2021/08/23 Redis