基于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 相关文章推荐
在b/s开发中经常用到的javaScript技术
Aug 23 Javascript
jQuery中height()方法用法实例
Dec 24 Javascript
高性能JavaScript 重排与重绘(2)
Aug 11 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
js插件dropload上拉下滑加载数据实例解析
Jul 27 Javascript
vue-router 权限控制的示例代码
Sep 21 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
Mar 07 Javascript
js中的reduce()函数讲解
Jan 18 Javascript
如何手写一个简易的 Vuex
Oct 10 Javascript
vue组件实现移动端九宫格转盘抽奖
Oct 16 Javascript
手写Vue源码之数据劫持示例详解
Jan 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
递归列出所有文件和目录
2006/10/09 PHP
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
PHP中的self关键字详解
2019/06/23 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
javascript history对象详解
2017/02/09 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
跟老齐学Python之用while来循环
2014/10/02 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
python基础梳理(一)(推荐)
2019/04/06 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
童装店创业计划书
2014/01/09 职场文书
电焊工工作岗位职责
2014/02/06 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers