这段javascript代码为什么把他们放在window.onload 函数里边反而运用不了,一直提示moveElement未定义

2025-01-03 16:51:48
推荐回答(1个)
回答1:

这是因为当把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(xpos      if(xpos>final_x)xpos--;
      if(ypos      if(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(xpos   if(xpos>final_x)xpos--;
   if(ypos   if(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);
}

建议用第二种