基于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 面向对象的JavaScript类
May 04 Javascript
关于firefox的ElementTraversal 接口 使用说明
Nov 11 Javascript
ASP中Sub和Function的区别说明
Aug 30 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
May 10 Javascript
可自己添加html的伪弹出框实现代码
Sep 08 Javascript
jQuery获取和设置表单元素的方法
Feb 14 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
Mar 17 Javascript
JavaScript中关于iframe滚动条的去除和保留
Nov 17 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
jquery无缝图片轮播组件封装
Nov 25 jQuery
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 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
谈一谈收音机的高放电路
2021/03/02 无线电
PHP内核探索:变量概述
2014/01/30 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
php短址转换实现方法
2015/02/25 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
Django框架下在视图中使用模版的方法
2015/07/16 Python
详解python的数字类型变量与其方法
2016/11/20 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
PyTorch基本数据类型(一)
2019/05/22 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
简单了解django索引的相关知识
2019/07/17 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
2014年个人委托书范本
2014/10/13 职场文书
个人自查自纠材料
2014/10/14 职场文书
法人代表证明书范本
2015/06/18 职场文书