基于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 相关文章推荐
jQuery入门问答 整理的几个常见的初学者问题
Feb 22 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
理解JavaScript的变量的入门教程
Jul 07 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
JS实现单击输入框弹出选择框效果完整实例
Dec 14 Javascript
学习javascript面向对象 理解javascript原型和原型链
Jan 04 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
Sep 01 Javascript
解决layer图标icon不加载的问题
Sep 04 Javascript
webpack常用构建优化策略小结
Nov 21 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
Jul 11 Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 Javascript
解决vant的Toast组件时提示not defined的问题
Nov 11 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通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
python仿抖音表白神器
2019/04/08 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
Python:slice与indices的用法
2019/11/25 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
Python验证码截取识别代码实例
2020/05/16 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
电大毕业生自我鉴定
2013/11/10 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
六查六看心得体会
2014/10/14 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server
golang 语言中错误处理机制
2021/08/30 Golang