这是因为当把moveElement函数放入window.onload后,作用域就变了,变成局部变量了,而setTimeout是运行于全局的(即使它是从window.onload内启动的),对于window.onload内部的moveElement它就看不见了,就认为是未定义的了。
可以这样改一下:
var moveElement; //把moveElement先声明为全局变量
window.onload=function(){
moveElement=function(elementID,final_x,final_y,interval){
var elem=document.getElementById(elementID);
var xpos=parseInt(elem.style.left);
var ypos=parseInt(elem.style.top);
if(xpos==final_x&&ypos==final_y)return true;
if(xposif(xpos>final_x)xpos--;
if(yposif(ypos>final_y)ypos--;
elem.style.left=xpos+"px";
elem.style.top=ypos+"px";
var repeat="moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
setTimeout(repeat,interval);
}
moveElement("message",200,100,10);
}
或者这样也行:
var moveElement=function(elementID,final_x,final_y,interval){
var elem=document.getElementById(elementID);
var xpos=parseInt(elem.style.left);
var ypos=parseInt(elem.style.top);
if(xpos==final_x&&ypos==final_y)return true;
if(xposif(xpos>final_x)xpos--;
if(yposif(ypos>final_y)ypos--;
elem.style.left=xpos+"px";
elem.style.top=ypos+"px";
var repeat="moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
setTimeout(repeat,interval);
}; //在window.onload外面声明moveElement函数
window.onload=function(){
moveElement("message",200,100,10);
}
建议用第二种