求教大神 !!!

来源:3-1 JS缓冲动画

微笑向陽安之若素

2017-02-04 16:10

想知道为什么速度没有向下、向上取整时,不会完全移出、移入啊?

写回答 关注

3回答

  • guoyou
    2017-02-24 00:51:32

    假设-200  》 0的过程,

    speed = ( iTarget  - oDiv.offsetLeft )/20

    随着移动的过程,oDiv.offsetLeft 值会越来越大,-200   ...  -100  ..   -50  ..  -20    ...  -10

    对应的值speed就越来越小,200/20  100/20   50/20  20/20   10/20   5/20

    很明显,后面的值是0<speed<1的   而且speed越来越小,

    所以在
    oDiv.style.left = oDiv.offsetLeft + speed +"px";  中就无法达到目标值,

    所以采取向上取整的形式把speed=0.*的情况都取值为1,

  • 慕勒6241362
    2017-02-20 21:35:22

    我的理解是 speed 没有取整时,当 oDiv.offsetLeft 越来越接近 iTarget , 由 speed = ( target - oDiv.offsetLeft)/20 可以看出 speed 的值会趋向于无穷小,没有了速度,也就不会完全移入移出。不过如果是这样的话,speed的值取不到0,div1就不会停止移动,只会无限逼近目标距离,这样显然是不可能的。评论里有人说这里浏览器会采取四舍六入五成双的方式自动取整,虽然不懂是怎么取整的,但只要能够取整,speed 的值就能取到0,也就可以停下来了。

    微笑向陽安之...

    谢谢(≧ω≦)/

    2017-02-23 20:51:43

    共 2 条回复 >

  • 酸溜土豆丝3362793
    2017-02-04 17:24:40

      speed = (iTarget - icur) / 20;

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

    我的理解是速度没有向上向下去取整时,speed将会带有小数,

    obj.style[attr] = icur + speed + 'px';当attr为width时,就会执行这句话,然后会把当时的值赋值给它。然后因为每隔一定的事件会刷新一次,然后会重新执行上诉过程 ,导致width值变大,最后就会导致不会完全移出、移入。

    微笑向陽安之...

    …… 没听懂 不过谢谢你。

    2017-02-05 15:23:06

    共 1 条回复 >

JS动画效果

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

113925 学习 · 1443 问题

查看课程

相似问题