cyniczzz

各种音乐播放器上都有一个自动滚动播放歌词的功能,那么这个功能用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>

分类:

技术点:

相关文章:

  • 2021-12-25
  • 2021-12-07
  • 2021-11-03
  • 2022-02-23
  • 2021-06-01
  • 2021-12-06
  • 2021-07-05
  • 2021-11-27
猜你喜欢
  • 2021-06-05
  • 2022-01-15
  • 2021-05-01
  • 2021-12-16
  • 2021-08-18
  • 2019-02-18
  • 2021-10-21
相关资源
相似解决方案