学习自JavaScript DOM编程艺术第二版
-------编程小孩
函数部分代码如下:
学习过程中遇到的难点:setTimeout()用法错误,导致函数正常递归了,时间控制却没有起作用,debug的我崩溃了好多次哇……%>_<%
疑点:clearTimeout的运用,copy自书中源代码 没搞明白到底为啥要那样用,但不那样用,在快速点击小方块后,就会出同时出现多个setTimeout,使得小方块既向左又向右运动,不伦
不类,明显是bug
setTimeout正确用法
//方法1
setTimeout('func()',interval);
//方法2
setTimeout(function(){func();},interval)
1 /* 2 * created by 编程小孩 3 * 4 * date: 26th,Feb,2013 5 * 6 * 说明:此函数包含 4 个参数 elemId代表要移动的元素的id 7 * 8 * final_x,final_y 分别代表要移动的最终位置的横、纵坐标 9 * 10 * interval 代表每一小步的移动间隔时间,单位ms 11 * 12 * 移动过程由递归实现,利用setTimeout实现时间控制 13 * 14 */ 15 16 function moveElement(elemId,final_x,final_y,interval){ 17 //兼容性验证 18 if(!document.getElementById(elemId)){ 19 alert("oops,未找到此元素!"); 20 return false; 21 } 22 23 var elem=document.getElementById(elemId); 24 if(!elem.style.position || !elem.style.top || !elem.style.left){ 25 elem.style.position="absolute"; 26 elem.style.top="0"; 27 elem.style.left="0"; 28 } 29 30 //清除setTimeout定时器 31 if(elem.movement) clearTimeout(elem.movement); 32 33 //获得元素初始x,y坐标,parseInt转换结果为整型 34 var pos_x=parseInt(elem.style.left), 35 pos_y=parseInt(elem.style.top); 36 37 if(pos_x==final_x && pos_y==final_y){ 38 return true; 39 } 40 41 var dist_x=final_x-pos_x, 42 dist_y=final_y-pos_y; 43 44 if(pos_x!=final_x){//x未到达 45 if(dist_x>=0){ 46 //相差距离为正,则用ceil去大于浮点数的最近整型 47 //例:Math.ceil(0.9)=1 48 //最小增加1像素 49 pos_x+=Math.ceil(dist_x/10); 50 } 51 else{ 52 //相差距离为负,则用floor取小于浮点数的最近整型 53 //例:Math.ceil(-0.9)=-1 54 //最小增加-1像素 55 pos_x+=Math.floor(dist_x/10); 56 } 57 } 58 59 if(pos_y!=final_y){//y未到达 60 if(dist_y>=0){ 61 pos_y+=Math.ceil(dist_y/10); 62 } 63 else{ 64 pos_y+=Math.floor(dist_y/10); 65 } 66 } 67 68 elem.style.left=pos_x+"px"; 69 elem.style.top=pos_y+"px"; 70 elem.movement=setTimeout(function(){moveElement(elemId,final_x,final_y,interval)},interval); 71 72 }
测试代码html部分
用了一个小圆角方块测试移动效果,\(^o^)/~
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>moveElement</title> 6 <style type="text/css"> 7 #test { width:100px; height:100px;background:#FF5400; border-radius:10px; } 8 </style> 9 <script type="text/javascript" src="moveElement.js"></script> 10 </head> 11 12 <body> 13 <div id="test" ></div> 14 </body> 15 </html>
window.onload事件部分
可以把这部分代码加到moveElement函数后面 保存文件为moveElement.js 方便测试
1 window.onload=function(){ 2 var move_elem=document.getElementById("test"); 3 var flag=false; 4 move_elem.onclick=function(){ 5 if(flag){ 6 moveElement("test",0,0,50); 7 flag=false; 8 } 9 else{ 10 moveElement("test",400,300,50); 11 flag=true; 12 } 13 }; 14 };
测试效果为第一次点击小方向右下移动,第二次左上返回移动,两者交替显示,快试试吧.
相关推荐
教育教学
温室穴盘栽培的菜瓜(Cucumis melo L . var . flexuosus Naud .)幼苗经0、2、4、6d干旱胁迫后,喷施稀释250、500、750、1000倍的“靓鼠”植物生理障碍修复剂,以喷清水作对照,处理24h后测定叶片的超氧化物歧化酶(SOD)、...
Notepad++ v6.7.9.2一种编辑工具,在HTML,c,c++,javascript等学习初期使用,有利于我们的学习。
该资源为红外热成像数据集和标记好的XML文件,且仅对数据集中的人进行了标注,共有3493张红外热成像图片和对应标注好的3493个XML格式文件。该资源可用于深度学习中红外热成像人体的识别,且仅供学习和研究,不以盈利...
OllySubScript v1.4.1一种脚本编辑工具,具有简单易用的特点。
WinHex_18.4是一种纯文本编辑器,可以编辑十六进制文件。
EditPlus v3.20一种开发语言的简单编辑工具,适用于HTML,c++,c语言等。
010 Editor V3.1.3一种十六进制编辑工具,例如病毒分析,pe结构分析等中很好用。
CmpPe+.v0.3是一种比较pe结构异同的重要工具,特别是在软件破解等领域应用。
FlexHEX是一种文本编辑器,可以快速的帮助我们编辑处理十六进制文件,在更改pe文件,更改版权中较为广泛的应用。
算法导论这本书是计算机专业学生们必掌握的书籍,在此上传课后答案
jasig开源单点登录框架的时序图
新发布的华为荣耀3c刷机包,emui3.0,Android4.4.2,刷机很easy
fiddler web debugger
数据挖掘上机作业 实现朴素贝叶斯简单分类
把一些软件的快捷键,加入到鼠标右键菜单下,方便我们使用。
Velocity文档中文版
英文PPT 初学者很有用 而且里面例子很基础很容易理解 涉及到分类、聚类等的很多算法与实现过程。
在虚拟机VMWARE WORLSTATION 上安装UBUNTN 11.10 编译并升级Linux内核,包含整个编译升级过程和需要使用的一些命令
纯文本编辑,HTML,win32,汇编编辑等一些语言的手工无提示编辑工具。