没进行Math.floor之前,oDiv.offsetLeft 跟 iTarget值不同啊,一个是-190,一个是-200,可是怎么运动就停止了呢,oDiv.offsetLeft==iTarget,这个还没成立啊

来源:3-1 JS缓冲动画

qq_马五寨小子_0

2016-01-31 19:09

window.onload=function(){

    var oDiv=document.getElementById("div1");

    oDiv.onmouseover=function(){

        startMove(0);

    }

    oDiv.onmouseout=function(){

        startMove(-200);

    }

}

 

    var timer=null;

 

function startMove(iTarget){

        clearInterval(timer);//清空所有定时器

        var oDiv=document.getElementById("div1");

        timer=setInterval(function(){

            speed=(iTarget-oDiv.offsetLeft)/20;

            speed=speed>0?Math.ceil(speed):Math.floor(speed);

            alert(Math.floor(-0.5));//可以查看最后的变化是1px速度

            if(oDiv.offsetLeft==iTarget){

                clearInterval(timer);

            }

            else{

            oDiv.style.left=oDiv.offsetLeft+speed+"px";}

        }, 10)

}


写回答 关注

2回答

  • 小感冒
    2016-02-03 21:18:17
    已采纳

    复制了一下你的代码测试了一下,应该是停在-190.5这个数的。

    原因我理解的是这样的:因为-190.5还差-9.5就达到了-200,但是如果在进行运算的话,就是比-200小了。

    好比10/3,结果是3余1,永远会留下一个1,这个1就相当于上面所说的-9.5.

    qq_风_5...

    比-200小,但是没满足oDiv.offsetLeft==iTarget这个条件定时器应该还是可以进行的啊,这里没满足这个条件为什么会停止呢

    2016-03-13 00:08:54

    共 2 条回复 >

  • 贾名
    2016-02-01 11:07:28

    不知道

JS动画效果

通过本课程JS动画的学习,从简单动画开始,逐步深入各种动画框架封装

113925 学习 · 1443 问题

查看课程

相似问题