微笑向陽安之若素
2017-02-04 16:10
想知道为什么速度没有向下、向上取整时,不会完全移出、移入啊?
假设-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,
我的理解是 speed 没有取整时,当 oDiv.offsetLeft 越来越接近 iTarget , 由 speed = ( target - oDiv.offsetLeft)/20 可以看出 speed 的值会趋向于无穷小,没有了速度,也就不会完全移入移出。不过如果是这样的话,speed的值取不到0,div1就不会停止移动,只会无限逼近目标距离,这样显然是不可能的。评论里有人说这里浏览器会采取四舍六入五成双的方式自动取整,虽然不懂是怎么取整的,但只要能够取整,speed 的值就能取到0,也就可以停下来了。
speed = (iTarget - icur) / 20;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
我的理解是速度没有向上向下去取整时,speed将会带有小数,
obj.style[attr] = icur + speed + 'px';当attr为width时,就会执行这句话,然后会把当时的值赋值给它。然后因为每隔一定的事件会刷新一次,然后会重新执行上诉过程 ,导致width值变大,最后就会导致不会完全移出、移入。
JS动画效果
113925 学习 · 1443 问题
相似问题