为了账号安全,请及时绑定邮箱和手机立即绑定

麻烦大神解释下以下代码中var timer=null为什么不能放在函数里面。

麻烦大神解释下以下代码中var timer=null为什么不能放在函数里面。

慕田峪8701529 2017-08-22 09:26:48
<script>    window.onload=function ()    {        var odiv=document.getElementById('div1');        odiv.onmouseover=function ()        {            StarMove(0);        }        odiv.onmouseout=function ()        {            StarMove(-100);        }    }//var timer=null;  timer为什么一定要放在这里,而不能放在starmove函数里面   function StarMove(iTarget)    {        var odiv=document.getElementById('div1');        var timer=null; //放这里的运行结果有问题        clearInterval(timer);        timer=setInterval(function (){            var iSpeed=0;            if(odiv.offsetLeft<iTarget)            {                iSpeed=10;            }            else            {                iSpeed=-10;            }            if(odiv.offsetLeft==iTarget)            {                clearInterval(timer);            }            else            {                odiv.style.left=odiv.offsetLeft+iSpeed+'px';            }        }, 30);    }
查看完整描述

2 回答

?
Jaydon_

TA贡献26条经验 获得超10个赞

Javascript中function代表的是对象, 你放在外面是全局变量,你要是想在里面使用,每次调用一次StartMove是不是timer就会初始化为null呢?当然就会出现问题了...

查看完整回答
反对 回复 2017-08-24
?
信者得救

TA贡献22条经验 获得超10个赞

当timer=null放在外面的时候。全部setInterval,也就是每一次调用StarMove,共用一个timer变量来作原来定时器,clearInterval(timer)就可以清除掉之前的那一个定时器,再重新赋值给定时器。

当timer=null放在函数里面的时候。每一个,就是每一次onmouseover,调用函数StarMove时,都会新建一个var timer,然后再clearInterval(timer)就清除不了之前的定时器了。所以这时,每一次onmouseover时,都会叠加一个定时器。你就会看到方块的速度变快了。

查看完整回答
反对 回复 2017-08-22
  • 慕田峪8701529
    慕田峪8701529
    把 var timer=null;放在 function StarMove(iTarget)里面运行结果不是速度变快了,而是一直在抖动。。。
  • 信者得救
    信者得救
    我想了一下你说的抖动,应该是因为你没有设置*{margin:0;padding:0;}这样在你设置定位的时候,设置了position:absolute;但又没有设置left:0;这样定位的时候就会是left:8px,top:8px,因为iSpeed为10,所以永远到达不了0px。 你把鼠标从div1的左侧移入你就会看到无论timer放在里还是外,都会抖动。 而你加上left:0;你就会发现无论怎样都不会抖动。 再解释一下为什么。 而从右侧移入, 把timer放在外面的时候,onmouseover触发,然后onmouseout马上触发,timer就会替换掉onmouseover时的那一个,所以就会移出屏幕。 而把timer放在里面时,就会产生两个定时器。 两个定时器都没法到达终点,所以就会一直运行,所以就会抖动。
  • 慕田峪8701529
    慕田峪8701529
    好像有点道理,但是我还需要捋一捋思路,感谢~~
  • 2 回答
  • 1 关注
  • 2476 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信