|

 升级   8% 钱包- 0 RMB
人品- 11
- 注册时间
- 2012-2-6
- 最后登录
- 2012-2-17
- 在线时间
- 2 小时
|

这种例子在网上一搜就是一大把,但是对于我这种js菜鸟来说,编程逻辑才是我要掌握的东西。于是把做过的东西再记下来,再次理清一下思路。
循环滚动的原理
制作一个无缝向上滚动,我们所要利用的是scrollTop属性。一般的做法是把要滚动的内容A放在一个容器C里面。通过不停的改变scrollTop的值,从而得到滚动的效果,为了让滚动能够连续,我们还要复制一遍A,当A的复制品B超出C的可视野区域时,让scrollTop变回0,这样就造成一种循环滚动的假象。例图如下:

具体效果请看Demo
间歇滚动的思路
间歇滚动滚动视觉上给人的感觉就是,滚动一段距离,然后停顿一下,再接着滚动一段距离。
我们可以把动作拆分开来,写成不同的动作函数。
1.我们先把页面结构写好
- <dl id="scrollBox" >
- <dt>
- <p>这是一条滚动公告</p>
- <p>这是一条滚动公告2</p>
- <p>这是一条滚动公告3</p>
- <p>这是一条滚动公告4</p>
- </dt>
- <dd></dd>
- </dl>
2.复制一遍dt:
- var Marquee = function(id){
- this.container = document.getElementById(id);
- this.original = this.container.getElementsByTagName("dt")[0];
- this.clone = this.container.getElementsByTagName("dd")[0];
- this.scrolln=this.scrollCol=0;//在第四点来存储滚动距离
- this.clone.innerHTML=this.original.innerHTML;//复制dt
- this.container.scrollTop = 0;//复位scrollTop
- }
3.让内容滚动20像素后停止:
- this.rolling = function(){
- this.container.scrollTop=this.scrolln;
- if(this.scrolln==20){
- return false;
- }else{
- this.scrolln +=1;
- var o = this;
- function m(){o.rolling();}
- setTimeout(m,40);
- };
- };
4.把滚动的距离叠加起来,并且当scrollTop超过B的高度时,重置为0:
- this.rolling = function(){
- this.container.scrollTop=this.scrolln;
- this.container.scrollTop=this.scrolln+this.scrollCol;
- if(this.container.scrollTop-this.clone.offsetHeight>=0){
- this.container.scrollTop=0;
- }//scrollTop超过B的高度时,重置为0:
- if(this.scrolln==20){
- return this.setroll();//停顿两秒再启动滚动函数
- }else{
- this.scrolln +=1;
- var o = this;
- function m(){o.rolling();}
- setTimeout(m,40);
- };
- };
- this.setroll=function(){
- this.scrollCol = this.container.scrollTop;//保存已滚动的距离
- this.scrolln=0;//清零 再次使用
- var o=this;
- function m(){o.rolling()};
- setTimeout(m,2000);
- };
|
|