console
txt
条件:speed < 0.5 ;
var speed = (iTarget - box.offsetLeft)/n;
speed = Math.ceil(speed);
问:是否存在向上取整后,得到的值大于剩余路程的值的可能性?
ps:剩余路程: iTarget - box.offsetLeft
向上取整后增加的值: (1 - speed)
设k为剩余路程,其中n>1:
k/n + 0.? > k
k + 0.?n > nk
0.?n > (n-1)k
n/n-1 > k/0.?
不会越过目标位置,因为box.offsetLeft获取的只能是整数。
当box.offsetLeft等于目标位置(300)时,speed是0,就是停止了。
其次box.offsetLeft最大也只有299,不会是299.5之类的有小数的。
299+1正好300
setInterval(function(){
var speed = (iTarget - box.offsetLeft)/10;
speed = Math.ceil(speed);
box.style.left = box.offsetLeft + speed + "px";
},30);
首先我们来看,box.offsetLeft的值一定为一个整数,当box.offsetLeft == 300时,刚好满足在目标位置停止的条件;
其实,即使对speed向上取整,增加的值也只是增加个零点几(0.?)而已啊 ! 而box.offsetLeft又因为是个整数,因此增加个零点几并不会让box.offsetLeft超过目标位置!
因此,我们总结一下这个问题:
1.当没有利用Math.ceil(speed)对speed向上取整时,.box会在何时停止在目标位置前?
在speed的值小于0.5时,.box将会停止!因为若speed<0.5, (box.offsetLeft + speed)的值将是一个定值。
2.当利用Math.ceil(speed)对speed向上取整时,.box将会准确停止在目标位置上.
3.当向上取整时,是否会产生运动物体超过目标位置的bug?
不会,原因是: 首先我们来看,box.offsetLeft的值一定为一个整数,当box.offsetLeft == 300时,刚好满足在目标位置停止的条件;
其实,即使对speed向上取整,增加的值也只是增加个零点几(0.?)而已啊 ! 而box.offsetLeft又因为是个整数,因此增加个零点几并不会让box.offsetLeft超过目标位置!
speed = speed>0?Math.ceil(speed):Math.floor(speed);