纯菜鸟一枚,刚接触js,写了一段脚本,目的是为了实现图片自动轮显。代码如下:<div id="slideContainer">    <div id="imgContainer">
     <ul>
        <li><img src="1.jpg" alt="" width="800" /></li>
        <li><img src="2.jpg" alt="" width="800" /></li>
        <li><img src="3.jpg" alt="" width="800" /></li>
        <li><img src="4.jpg" alt="" width="800" /></li>
        </ul>
    </div>    <ul id="number">
     <li >1</li>
     <li >2</li>
     <li>3</li>
     <li>4</li>
    </ul>
</div>
function addLoadEvent(func){
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function(){
oldonload();
func();
}
}
}function finalMove(){
var imgContainer=document.getElementById("imgContainer");
        imgContainer.style.marginLeft="0px";
        setTimeout("move()",5000);
}function move(){
var imgContainer=document.getElementById("imgContainer"); var nowMl=parseInt(imgContainer.style.marginLeft);    var integer=parseInt(nowMl/800);    var targetMl=(integer-1)*800; if(nowMl>targetMl){
nowMl=nowMl-8;
imgContainer.style.marginLeft=nowMl+"px";
}
if(nowMl==targetMl){
imgContainer.style.marginLeft=nowMl+"px";
return true;
} setTimeout("move()",100);
}addLoadEvent(finalMove);问题:如代码所示,原本是想最终每隔5秒向左滑动800,结果只滑动了一次,即margin-left:800px的时候就停下没有反应了。
Why?Why?Why? 望高手指点 谢谢先了

解决方案 »

  1.   

    setInterval()用这个是定时执行,setTimeout只会执行一次当然 只动一次了
      

  2.   

    同楼上,用setInterval(),你这样,递归调用setTimeout("move()",100),就嵌套setTimeout了。
      

  3.   

     if(nowMl==targetMl){
            imgContainer.style.marginLeft=nowMl+"px";
            return true;
        }你return了。没有再   setTimeout("move()",100);
    所以结束了。改成: 
     if(nowMl>=targetMl){
            imgContainer.style.marginLeft="0px";
        }
      

  4.   

    if(nowMl==targetMl){
            imgContainer.style.marginLeft=nowMl+"px";
            return true;
        }
        setTimeout("move()",100);
    是不是被执行了这个if语句,结束了循环,否则的话,应该是要每0.1秒(这个时间真短)调用一次move函数的var nowMl=parseInt(imgContainer.style.marginLeft);不知道第一次执行的时候,这个应该值为0吧,是这样的吧?
      

  5.   

    intervalId = window.setInterval(test,1000);//每隔1秒 执行一次函数test
    window.clearInterval(intervalId);//停止循环函数
      

  6.   

    谢谢1楼,果然是setTnterval和setTimeout没分清,因为先写的move(),所以误以为setTimeout为重复执行了。
    ps:贴代码的时候,css部分忘了贴出来。现在看来,这个样式大家都不用看的哈~~
      

  7.   

    参考1楼吧。我把贴出来的代码中setTimeout("move()",5000)改成setInterval("move",5000)结果就正常了,即imgContainer每隔5秒就向移动800。