基于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静态类
Dec 31 Javascript
javascript实现uploadify上传格式以及个数限制
Nov 23 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 Javascript
你不知道的高性能JAVASCRIPT
Jan 18 Javascript
Vue实现双向数据绑定
May 03 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
Angular6 发送手机验证码按钮倒计时效果实现方法
Jan 08 Javascript
jQuery实现动态添加和删除input框代码实例
Mar 29 jQuery
js字符串处理之绝妙的代码
Apr 05 Javascript
javascript执行上下文、变量对象实例分析
Apr 25 Javascript
nginx部署多个vue项目的方法示例
Sep 06 Javascript
vue实现可移动的悬浮按钮
Mar 04 Vue.js
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将字符分解为多个字符串的方法
2014/11/22 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
python实现在pickling的时候压缩的方法
2014/09/25 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
基于Tensorflow高阶读写教程
2020/02/10 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
html5 div布局与table布局详解
2016/11/16 HTML / CSS
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
技校教师求职简历的自我评价
2013/10/20 职场文书
音乐专业应届生教师求职信
2013/11/04 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
回门宴新郎答谢词
2014/01/12 职场文书
治超工作实施方案
2014/05/04 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
Golang bufio详细讲解
2022/04/21 Golang