关于直接声明变量时直接初始化为setInterval
2016-08-20 15:46
106 查看
<script type="text/javascript"> window.onload=function(){ var move=document.getElementById("move"); move.onmouseover=function(){ moveStart(0); } move.onmouseout=function(){ moveStart(-200); } } function moveStart(target){ clearInterval(doMove); var speed=0; if (move.offsetLeft<target){ speed=10; }else{ speed=-10; } var doMove=setInterval(function(){ if (move.offsetLeft==target){ clearInterval(doMove); }else { move.style.left=move.offsetLeft+speed+"px"; console.log(move.offsetLeft); } },30); } </script>
看完教程后自己敲的代码,结果发现实现的效果为持续性的出出入入,div的left属性一直保持在0和-10不断变换。
最后在贴吧找到了原因
var doMove=setInterval(function(){ if (move.offsetLeft==target){ clearInterval(doMove); }else { move.style.left=move.offsetLeft+speed+"px"; console.log(move.offsetLeft); } },30);
关于这部分,每次执行 move的时候,都会重新声明一个未设置的局部 doMove。
由於是局部变量,所以只限於本次的 move可使用。下一次的 move会有新的 doMove,与上次无关。
下面就是修改后的代码,声明全局变量var doMove=null,这样在setInterval 跟 clearInterval 读取的是同一个 doMove
<script type="text/javascript"> window.onload=function(){ var move=document.getElementById("move"); move.onmouseover=function(){ moveStart(0); } move.onmouseout=function(){ moveStart(-200); } } var doMove=null; function moveStart(target){ clearInterval(doMove); var speed=0; if (move.offsetLeft<target){ speed=10; }else{ speed=-10; } doMove=setInterval(function(){ if (move.offsetLeft==target){ clearInterval(doMove); }else { move.style.left=move.offsetLeft+speed+"px"; console.log(move.offsetLeft); } },30); } </script>
参考的帖子:http://tieba.baidu.com/p/3357702662#
相关文章推荐
- 关于Java变量、数组、对象的声明、初始化与访问方式-----《疯狂Java突破程序员基本功的16课》读书笔记----第一章
- JavaScript var声明变量和直接用标识符初始化的细节
- fortran子程序声明时直接初始化变量具有save属性
- 关于case语句中声明变量并初始化的注意事项
- 关于Javascript循环体变量声明与初始化的效率问题
- 关于Java变量的声明、内存分配及初始化详解
- 关于Javascript循环体变量声明与初始化的效率问题
- 变量与声明时初始化
- c++类中变量初始化顺序与声明顺数一致
- 关于JAVA中变量的初始化及类属性的默认值问题
- 关于存储过程事务,返回值,变量声明以及执行方法
- 对Visual C++中for语句中初始化部分声明的变量的作用域存在的问题
- [C#基础]2.局部变量的初始化(要求体现出,不初始化直接使用的后果)
- 关于static和final修饰类的属性变量以及变量的初始化
- 关于变量的类型与变量初始化的一点思考
- C# 中关于类初始化时内部变量的执行顺序
- 局部变量声明后最好立即初始化
- C# 变量声明时无需初始化
- 关于java中变量的初始化的问题
- 关于类成员变量的声明和实例化的时机