[javascript]文字无缝向上滚动

静态代码:


<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中显示。

思路:通过js的定时器,每隔50毫秒将#marquee层的css属性margin-top -1px,并且在最后一段文字移动过去后将margin-top归零。 
初步代码:

<!-- 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);
})();

这样初步的效果出来了,但是还有一个问题: 
当最后一行文字移动结束时,会有一段空白,然后突然复位,无法无缝滚动,解决也很容易,我们一开始就将第一段文字复制到最后一行后面,调整

标签的高度为30px。 
附加css:


<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);
})();

完整的代码:


<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值