var_var
2016-07-11 09:47
function go(){
if(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft){
list.style.left = parseInt(list.style.left) +speed + 'px';
setTimeout(go,interval);
}else{
list.style.left = parseInt(list.style.left) + offset + 'px';
if(parseInt(list.style.left) > -600){
list.style.left = -3000 + 'px';
}
if(parseInt(list.style.left) < -3000){
list.style.left = -600 + 'px';
}
}
}
setTimeout(go(),interval);这里的go()表示函数的直接调用,也就是在setTimeout这个函数没有执行的时候,go()就已经执行了;这样的话当第一次执行go()这个函数,并到 setTimeout(go(),interval)这行代码块时,go()在setTimeout还没执行时,它就执行了,这时go()再次被调用,而setTimeout没有执行;然后又到了 setTimeout(go(),interval)这行代码块,这时go()再次被调用,而setTimeout还是没有执行,以后一直这样,直到满足(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft)这个条件时, list.style.left = parseInt(list.style.left) + offset + 'px';也就是图片到达目的地。所以当你 写成setTimeout(go(),interval)时,你会发现图片直接跳转,而没有缓慢的动画过程,因为setTimeout没有执行过,那就不会有每隔一个interval,位移发生一点变化直到到达目的地这回事了,而是直接到达目的地。
重回答:
setTimeout(go(),interval);这里的go()表示函数的直接调用,也就是在setTimeout这个函数没有执行的时候,go()就已经执行了;这样的话当第一次执行go()这个函数,并到 setTimeout(go(),interval)这行代码块时,go()在setTimeout还没执行时,它就执行了,这时go()再次被调用,这时图片位移发生变化,由于
这个函数没有返回值或者返回值不是可执行的函数或者其他的代码,所以只是图片位移发生变化,setTimeout没有执行任何函数(也就是说如果这个go函数返回一个函数的话,那么setTimeout就会执行返回那个函数);
然后又到了 setTimeout(go(),interval)这行代码块,这时go()再次被调用,接下来情况如上次一样;以后一直这样,直到满足(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft)这个条件时, list.style.left = parseInt(list.style.left) + offset + 'px';也就是图片到达目的地。所以当你 写成setTimeout(go(),interval)时,你会发现图片直接跳转,而没有缓慢的动画过程,因为setTimeout没有执行go这个函数过,那就不会有每隔一个interval,位移发生一点变化直到到达目的地这回事了,而是直接到达目的地。
这样写setTimeout(go,interval)和这样写setTimeout("go()","interval()")是一样的。——个人见解,仅供参考
焦点图轮播特效
65279 学习 · 611 问题
相似问题