<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>mouseOverOut</title> <style type="text/css"> *{margin:0;padding:0;} #div1{ height:200px; width:200px; background:red; position:relative; left:-200px; top:0; } #div2{ height:50px; width:20px; background:blue; position:absolute; top:75px; left:200px; } </style> </head> <body> <script type="text/javascript"> window.onload=function(){ var oDiv=document.getElementById('div1'); oDiv.onmouseover=function(){ startMove(0); } oDiv.onmouseout=function(){ startMove(-200); } } var timer=null; var speed=0; function startMove(iTarget){ clearInterval(timer); var oDiv=document.getElementById('div1'); speed=(iTarget-oDiv.offsetLeft)/20; speed=speed>0?Math.ceil(speed):Math.floor(speed); timer=setInterval(function(){ if(oDiv.offsetLeft==iTarget){ clearInterval(timer); }else{ oDiv.style.left=oDiv.offsetLeft+speed+'px'; } },20); } </script> <div id="div1"> <div id="div2">分享</div> </div> </body> </html>
以上我是敲得代码,几乎和老师的一样
但是,我测试过程有一个bug,就是在蓝色分享不断地将鼠标移进移出就会出现一些bug,大神们可以测试一下,帮我解答一下。谢谢啦
timer=setInterval(function(){ if(oDiv.offsetLeft==iTarget){ clearInterval(timer); } //增加两个else if语句 else if(iTarget<0&&iTarget-oDiv.offsetLeft>0){ oDiv.style.left=iTarget+'px'; }else if(iTarget==0&&iTarget-oDiv.offsetLeft<0){ oDiv.style.left=iTarget+'px'; } else{ oDiv.style.left=oDiv.offsetLeft+speed+'px'; } },20);
问题的起因是由于反复的进行鼠标移入移出,导致oDiv.offsetLeft+speed的值超过iTarget这一边界,从而不能清除定时器。
。。。搞笑,,,,逗我?我初学者。。。
为什么我feel不到bug?
测试过了,果然可以了,谢谢你啦