|
知识点梳理:
1.为元素创建属性,elem.movement=setTimeout(repeat,interval);优点:可以测试它是否存在,并在存在的情况下使用clearTimeout, 快速移动鼠标指针动画效果不再混乱
2.Math对象的ceil方法:Math.ceil(number) 例如:Math.ceil(5.2) 返回结果为6
3.函数parseInt(string) 可以把字符串里的数值信息提取出来, 例如:parseInt("39 steps"); 返回结果39
4.函数setTimeout("function",interval) 第一个参数通常是一个字符串,其内容是将要执行的那个函数的名字,第二个参数是一个数值,以ms为单位。
5. var repeat="moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"; elem.movement=setTimeout(repeat,interval);
以下解析为引用:
elementID的值作为一个字符串传给moveElement函数,所以要用引号包裹 假设elementID=1,final_x=2,final_y=3,interval=4, 则repeat的值为: moveElement('1',2,3,4) 这里1用引号,所以1是字符串类型
因为函数要传参,第一个参数是一个字符串所以elementID外面有单引号包裹着双引号,单引号是负责表达等下setTimeout的字符串标记,而双引号是你repeat的字符串标记,后面用“,”隔开所有参数,依旧使用双引号,因为对repeat而言,这是个字符串而已,“+”连接是因为对于repeat字符串连接就是用“+”才能连接字符串
以下函数可以实现图片越接近目的地速度越慢的动画效果。
function moveElement(elementID,final_x,final_y,interval){ if(!document.getElementById) return false; if(!document.getElementById(elementID)) return false; var elem=document.getElementById(elementID); if(elem.movement){ clearTimeout(elem.movement); } if(!elem.style.left){ elem.style.left="0px"; } if(!elem.style.top){ elem.style.top="0px"; } var xpos=parseInt(elem.style.left); var ypos=parseInt(elem.style.top); var dist=0; if(xpos==final_x && ypos==final_y){ return true; } if(xpos<final_x){ dist=Math.ceil((final_x-xpos)/10); xpos=xpos+dist; } if(xpos>final_x){ dist=Math.ceil((xpos-final_x)/10); xpos=xpos-dist; } if(ypos<final_y){ dist=Math.ceil((final_y-ypos)/10); ypos=ypos+dist; } if(ypos>final_y){ dist=Math.ceil((ypos-final_y)/10); ypos=ypos-dist; } elem.style.left=xpos+"px"; elem.style.top=ypos+"px"; var repeat="moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"; elem.movement=setTimeout(repeat,interval); } |