基于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 相关文章推荐
js对象关系图 方便dom操作
Mar 18 Javascript
JS求平均值的小例子
Nov 29 Javascript
javascript中全局对象的isNaN()方法使用介绍
Dec 19 Javascript
分享一款基于jQuery的视频播放插件
Oct 09 Javascript
JavaScript 学习笔记之操作符
Jan 14 Javascript
javascript结合Canvas 实现简易的圆形时钟
Mar 11 Javascript
jQuery消息提示框插件Tipso
May 04 Javascript
JavaScript中的原型prototype完全解析
May 10 Javascript
如何使用Vuex+Vue.js构建单页应用
Oct 27 Javascript
vue+axios实现登录拦截的实例代码
May 22 Javascript
vue实现底部菜单功能
Jul 24 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
Oct 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
用PHP实现图象锐化代码
2007/06/14 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
鼠标图片振动代码
2006/07/06 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
经济学博士求职自荐信范文
2013/11/23 职场文书
市场部专员岗位职责
2013/11/30 职场文书
自荐信格式简述
2014/01/25 职场文书
房屋买卖协议书
2014/04/10 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
民间借贷协议书范本
2014/10/01 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python