2 xu dragon xu_dragon 于 2015.07.07 10:58 提问

DOM编程艺术课本中实现动画函数的一个问题
 function moveElement(elementID,final_x,final_y,interval){   
    //alert("moveElement");   
    i++;   
    if(!document.getElementById) return false;   
    if(!document.getElementById(elementID)) return false;   
    var elem = document.getElementById(elementID);   
//  alert(elem.style.left);   
//  if(elem.movement){   
//      clearTime(elem.movement);   
//  }   
    if(!elem.style.left){   

        elem.style.left = "0px";   
    }   
    if(!elem.style.top){   
        elem.style.top = "0px";   
    }   

    var xpos =parseInt(elem.style.left);//alert(xpos);   
    var ypos =parseInt(elem.style.top);//alert(ypos);   
    if(xpos==final_x&&ypos==final_y){   
        //alert("true");   
        return true;   
    }   
    //alert("xpos="+xpos+"final_x="+final_x);   
    if(xpos<final_x){   
        var dist = Math.ceil((final_x-xpos)/10);   
        xpos=xpos+dist;   
    }   
    if(xpos>final_x){   
        //alert("xpos="+xpos+"final_x="+final_x);   
        var dist = Math.ceil((xpos-final_x)/10);   
        xpos=xpos-dist;   
        //alert("xpos="+xpos+"dist="+dist);   
    }   
    if(ypos<final_y){   
        var dist = Math.ceil((final_y-ypos)/10);   
        ypos=ypos+dist;   
    }   
    if(ypos>final_y){   
        var dist = Math.ceil((ypos-final_y)/10);   
        ypos=ypos-dist;   
    }   
    elem.style.left = xpos + "px" ;//alert(xpos);   
    elem.style.top  = ypos + "px" ;   
    //alert(Math.abs(xpos));   
    var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";   
    elem.movement = setTimeout(repeat,interval);   
}  

repeat怎样理解啊,求赐教

2个回答

showbo
showbo   Ds   Rxr 2015.07.07 13:57

http://boleyn.iteye.com/blog/1144015

建议传递函数,传递字符串效率不怎么样,而且有字符串参数还得注意转义什么的

 var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";   
    elem.movement = setTimeout(function(){      
        moveElement(elementID,final_x,final_y,interval)
        },interval);   
xu_dragon
xu_dragon 虽然还是不理解原来传参数的是怎么一回事,但这个方法确实好!
2 年多之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.07.07 13:10
 var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";   
elem.movement = setTimeout(repeat,interval);   //settimeout的第一个参数是function,而且需要字符串括起来。repeat就是一个function方法的字符串。

http://www.jb51.net/article/35535.htm
Csdn user default icon
上传中...
上传图片
插入图片