[javascript]文字无缝向上滚动

来源:互联网 发布:大数据的具体应用 编辑:程序博客网 时间:2024/06/04 08:10

静态代码:

<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>
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝一惊一乍睡觉不踏实怎么办 新婴儿睡觉不踏实怎么办 耳朵里面疼肿了怎么办 生出来的孩子是畸形怎么办 二胎生了缺陷儿怎么办 扣完肚脐眼后疼怎么办 刚出生的婴儿屁股红怎么办 狗狗耳朵流血了怎么办 狗狗不让掏耳朵怎么办 下巴总是反复长脓包怎么办 不胖但有双下巴怎么办 早上起床眼肿了怎么办 小孩鼻梁很塌的怎么办 17岁鼻子是塌的,怎么办 鼻子又塌又翘怎么办 戴眼镜鼻子塌了怎么办 耳朵里长了粉刺怎么办 耳洞太大了怎么办变小 天生嘴唇厚又大怎么办 上嘴唇太厚怎么办还翘 20岁欠债5万怎么办 脑袋撞了个包怎么办 交通事故对方全责但不赔偿怎么办 人格分列症的症状怎么办 子宫肌瘤月经量多怎么办 卵泡长得太慢怎么办 后期卵泡长得慢怎么办 促排卵泡长得慢怎么办 子宫内膜薄要怎么办啊 hcg值正常孕酮低怎么办 20号染色体三体怎么办 14号染色体三体怎么办 怀孕七个月不想要了怎么办 胎儿性染色体45x怎么办 16号染色体偏多怎么办 大拇指又短又宽怎么办 削山药皮皮肤痒怎么办 脊柱侧弯20度怎么办 27岁脊柱侧弯怎么办 右侧侧脑室增宽怎么办 左侧脑室增宽该怎么办