三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之

无缝滚动字幕
作者:Neoxone    发表时间: 2009年12月29号,星期二     阅读:5,054 次

先看看无缝滚动的效果,使用window的setInterval方法重复调用一个滚动函数。
关键的代码是

  1. function roll(){
  2.             //判读是否滚动到了第二部分的顶部位置
  3.             (box2.offsetTop-wrap.scrollTop<=0) ? wrap.scrollTop-=box1.offsetHeight : wrap.scrollTop++;
  4.             $id('refer').innerHTML=box2.offsetTop+' '+wrap.offsetHeight+' '+wrap.scrollTop; //无他,参考值尔
  5.         }
  6.         var start=setInterval(roll,speed);

而无缝的关键还在这里

  1. box2.innerHTML=box1.innerHTML//拷贝一份内容跟随其后,使原内容之后还有内容

我原本要做的效果并非全如上面,我需要的效果是:单条为一步阶,进行间歇性循环无缝滚动

其实提起滚动,应该立马会想起走马灯(marquee)。尽管对其一直有偏见,但我还是会给他个机会的。。。

  1. function func(){
  2.         $$('quee').stop();
  3.         setTimeout(func2,1000);
  4.     }
  5.     function func2(){
  6.         $$('quee').start();
  7.         setTimeout(func,1000);
  8.     }

延时1秒交叉调用marquee的内置函数start()和stop();

不过,scrollamount影响的步阶不准确啊,而且不能做到无缝么。好,将marquee拖出去斩了(marquee:冤枉啊~~~~~)

下面是新的做法

  1. function roll(){
  2.         wrap.scrollTop++;
  3.          if(box1.offsetHeight-wrap.scrollTop>0){  //尚未滚动到第二部分的顶部位置时
  4.              if(wrap.scrollTop % wrap.offsetHeight != 0)  
  5.              {
  6.                 return(setTimeout(roll,20));     //20毫秒即递归一次
  7.              }
  8.              else{                        //当滚动的累计距离达到显示域高度的倍数时
  9.                 return(setTimeout(roll,2000))//等待2秒才递归调用
  10.              }
  11.          }
  12.          else{ setTimeout(function(){wrap.scrollTop=0;roll()},2000); }
  13.     }

运用递归,而没有用setInterval

下面写成一个类,方便实例化调用

标签: , , , ,

3 条评论 发表在“无缝滚动字幕”上

  1. 多组无缝滚动效果如何做? 说:

    如2X5=10格的,有的需要进行无缝向上滚动,有的不需要,如何做?谢谢!

    回复

    oneboys 回复:

    呃,之前也没考虑这个。
    可以把#box1,#box2以参数形式传入函数roll()中,$$(‘box2′).innerHTML=$$(‘box1′).innerHTML;这句也放到函数里面。

    回复

  2. 能做个实例出来吗? 说:

    本人水平有限,谢谢!

    回复

留下回复

):9:( ):8:( ):7:( ):6:( ):5:( ):4:( ):3:( ):2:( ):20:( ):1:( ):19:( ):18:( ):17:( ):16:( ):15:( ):14:( ):13:( ):12:( ):11:( ):10:(