基于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实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
js中关于一个分号的崩溃示例
Nov 11 Javascript
JavaScript cookie的设置获取删除详解
Feb 11 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
Feb 26 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
jQuery基于cookie实现的购物车实例分析
Dec 24 Javascript
js+html5实现复制文字按钮
Jul 15 Javascript
帝国cms首页列表页实现点赞功能
Oct 30 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
Jan 25 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
Vue实现左右菜单联动实现代码
Aug 12 Javascript
JS+CSS实现随机点名(实例代码)
Nov 04 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学习笔记 数组遍历实现代码
2011/06/09 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
jQuery实现评论模块
2020/08/19 jQuery
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
中学生团员自我评价分享
2013/12/07 职场文书
元旦晚会策划方案
2014/02/18 职场文书
教师节演讲稿
2014/05/06 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL