zoukankan      html  css  js  c++  java
  • 用JavaScript实现歌词滚动播放

    各种音乐播放器上都有一个自动滚动播放歌词的功能,那么这个功能用JavaScript怎么实现呢?请看下文。

    一般音乐播放器使用的歌词格式都是lrc,为了方便处理,我们这里使用XML格式的歌词。介绍一个网站:中文歌词库。它提供xml格式的歌词。

    我们先来看一下这个例子的最终效果:

    下面是基于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>
  • 相关阅读:
    List<int>转化为逗号链接的字符串
    分页的总页数算法
    高性能SQLServer分页语句
    webconfig中的&符号问题解决
    检测SQLServer复制订阅进度
    jQuery自定义数组操作类(类似于List集合的增删改查)
    解决jquery绑定click事件出现点击一次执行两次问题
    IdentityServer4登陆中心
    AES加密解密通用版Object-C / C# / JAVA
    T-SQL 基本语法
  • 原文地址:https://www.cnblogs.com/cyniczzz/p/4929975.html
Copyright © 2011-2022 走看看