[javascript]文字無縫向上滾動

靜態代碼:css

<!-- lang: html -->
<div style="height:30px;overflow:hidden;">
    <div id='marquee'>
        <p>第1段</p>
        <p>第2段</p>
        <p>第3段</p>
        <p>第4段</p>
        <p>第5段</p>
    </div>
</div>

解釋:首先最外層是一個高度只有30px的層,這樣大概只能顯示一行文字。而後裏面有一個 #marquee的層,這個層包含了不少段文字,高度實際超出30px不少,咱們要實現的就是將#marquee不停的往上滾動,這樣多行內容將依次在30px中顯示。html

思路:經過js的定時器,每隔50毫秒將#marquee層的css屬性margin-top -1px,而且在最後一段文字移動過去後將margin-top歸零。 初步代碼:app

<!-- lang: js -->
(function(){
    var marquee = document.getElementById('marquee');
    var offset=0;
    var scrollheight =marquee.offsetHeight;
    setInterval(function(){
        if(offset == scrollheight){
            offset = 0;
        }
        marquee.style.marginTop = "-"+offset+"px";
        offset += 1;
    },50);
})();

這樣初步的效果出來了,可是還有一個問題: 當最後一行文字移動結束時,會有一段空白,而後忽然復位,沒法無縫滾動,解決也很容易,咱們一開始就將第一段文字複製到最後一行後面,調整<P>標籤的高度爲30px。 附加css: <!-- lang: html --> <style> #marquee p{height:30px;line-height: 30px;margin:0} </style> js代碼: <!-- lang: js --> (function(){ var marquee = document.getElementById('marquee'); var offset=0; var scrollheight =marquee.offsetHeight; var firstNode = marquee.children[0].cloneNode(true); marquee.appendChild(firstNode);//還有這裏 setInterval(function(){ if(offset == scrollheight){ offset = 0; } marquee.style.marginTop = "-"+offset+"px"; offset += 1; },50); })();code

完整的代碼:htm

<!-- lang: html -->
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width">
    </head>
    <body>
        <style>
            #marquee p{height:30px;line-height: 30px;margin:0}
        </style>
        <div style="height:30px;overflow:hidden;">
            <div id='marquee'>
                <p>第1段</p>
                <p>第2段</p>
                <p>第3段</p>
                <p>第4段</p>
                <p>第5段</p>
            </div>
        </div>
        
        <script>
            (function(){
                var marquee = document.getElementById('marquee');
                var offset=0;
                var scrollheight =marquee.offsetHeight;
                var firstNode = marquee.children[0].cloneNode(true);
                marquee.appendChild(firstNode);//還有這裏
                setInterval(function(){
                    if(offset == scrollheight){
                        offset = 0;
                    }
                    marquee.style.marginTop = "-"+offset+"px";
                    offset += 1;
                },50);
            })();
        </script>
    </body>
</html>
相關文章
相關標籤/搜索