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时陷入死循环 这种想法为什么不对啊,那位大侠能告诉一下这个程序的执行顺序是什么,看迷糊了
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时陷入死循环 这种想法为什么不对啊,那位大侠能告诉一下这个程序的执行顺序是什么,看迷糊了
function start() {
t=setInterval(scrolling,speed);//要过一定时间后才去执行
if(!p)o.scrollTop+=2;//紧接着就执行这里了,在执行scrolling之前使o.scrollTop+=2,就不会如你所想陷入死循环了
}
在start方法体中你会再次调用t=setInterval(scrolling,speed)的scrolling()方法!以此循环造成死循环