先看看无缝滚动的效果,使用window的setInterval方法重复调用一个滚动函数。
关键的代码是
- function roll(){
- if($$('box2').offsetTop-$$('wrap').scrollTop<=0) { //当滚动到第二部分的顶部位置时
- $$('wrap').scrollTop-=$$('box1').offsetHeight; //重置至第一部分顶部位置,相当于$$('box').scrollTop=0;
- }
- else{
- $$('wrap').scrollTop++ ;
- $$('refer').innerHTML=$$('box2').offsetTop+' '+$$('wrap').offsetHeight+' '+$$('wrap').scrollTop //无他,参考值尔
- }
- }
- var start=setInterval(roll,speed);
而无缝的关键还在这里
- $$('box2').innerHTML=box1.innerHTML; //拷贝一份内容跟随其后,使原内容之后还有内容
我原本要做的效果并非全如上面,我需要的效果是:单条为一步阶,进行间歇性循环无缝滚动。
其实提起滚动,应该立马会想起走马灯(marquee)。尽管对其一直有偏见,但我还是会给他个机会的。。。
- function func(){
- $$('quee').stop();
- setTimeout(func2,1000);
- }
- function func2(){
- $$('quee').start();
- setTimeout(func,1000);
- }
延时1秒交叉调用marquee的内置函数start()和stop();
不过,scrollamount影响的步阶不准确啊,而且不能做到无缝么。好,将marquee拖出去斩了(marquee:冤枉啊~~~~~)
下面是新的做法
- function roll(){
- wrap.scrollTop++;
- if($$('box1').offsetHeight-wrap.scrollTop>0){ //尚未滚动到第二部分的顶部位置时
- if(wrap.scrollTop%wrap.offsetHeight!=0) //
- {
- return(setTimeout(roll,20)); //20毫秒即递归一次
- }
- else{ //当滚动的累计距离达到显示域高度的倍数时
- return(setTimeout(roll,2000)); //等待2秒才递归调用
- }
- }
- else{
- setTimeout("$$('wrap').scrollTop=0;roll()",2000);
- }
- }
运用递归,而没有用setInterval
转发到新浪微博相关文章:
标签: marquee, setInterval, 无缝滚动, 递归
如2X5=10格的,有的需要进行无缝向上滚动,有的不需要,如何做?谢谢!
回复
oneboys 回复:
一月 15th, 2010 at 10:09
呃,之前也没考虑这个。
可以把#box1,#box2以参数形式传入函数roll()中,$$(’box2′).innerHTML=$$(’box1′).innerHTML;这句也放到函数里面。
回复
本人水平有限,谢谢!
回复