问答详情
源自:3-1 JS缓冲动画

求js动画效果里面的一些bug解决方法!!!

<!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,大神们可以测试一下,帮我解答一下。谢谢啦

提问者:guaguaerhao 2016-09-11 13:44

个回答

  • 我是7号
    2016-09-11 16:48:29
    已采纳

      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这一边界,从而不能清除定时器。


  • guaguaerhao
    2016-09-12 13:44:24

    。。。搞笑,,,,逗我?我初学者。。。

  • qq_GreenOrRed_0
    2016-09-12 13:17:24

    为什么我feel不到bug?

  • guaguaerhao
    2016-09-11 17:23:46

    测试过了,果然可以了,谢谢你啦