function startmarquee(lh,speed,delay,id) {
var t;
var p=false;
var o=document.getElementById(id);
o.innerHTML+=o.innerHTML;
o.onmouseover=function () {p=true;}
o.onmouseout=function () {p=false;}
o.scrollTop=0;
function start() {
t=setInterval(scrolling,speed);
if(!p)o.scrollTop+=2;
}
function scrolling() {
if(o.scrollTop%lh!=0) {
o.scrollTop+=2;
if(o.scrollTop>=o.scrollHeight/2)o.scrollTop=0;
}else {
clearInterval(t);
setTimeout(start,delay);
}
}
setTimeout(start,delay);
}这个函数中因为o.scrollTop=0,所以会在start()函数调用setInterval时陷入死循环 这种想法为什么不对啊,那位大侠能告诉一下这个程序的执行顺序是什么,看迷糊了

解决方案 »

  1.   

    不太清楚这是一个什么程序哈,个人感觉这个js的控制靠的变量p,也就是说鼠标滑过或者是划出,看样子要实现的效果是鼠标滑过的时候停止运转,鼠标划出之后继续原来的运转。不知道是不是这样一个意思哈,其实程序的执行顺序比较简单:总有一个开始-------总有一个结束!中间可能会有分支,但终归会返回,所以建议LZ从开始的函数直接往下找就可以了,如果一开始不是很清楚,可以用纸画一画,最明了了。
      

  2.   

    时间上正好有冲突。setInterval是几秒后反复会执行的函数,setouttime是只执行一次的。
      

  3.   

    关键在这里:
    function start() {
    t=setInterval(scrolling,speed);//要过一定时间后才去执行
    if(!p)o.scrollTop+=2;//紧接着就执行这里了,在执行scrolling之前使o.scrollTop+=2,就不会如你所想陷入死循环了
    }
      

  4.   

    你执行scrolling() 后如果o.scrollTop%lh!=0那么就会执行else里面的setTimeout(start,delay);
    在start方法体中你会再次调用t=setInterval(scrolling,speed)的scrolling()方法!以此循环造成死循环