SOURCE

console 命令行工具 X clear

                    
>
console
txt

条件:speed < 0.5 ;

var speed = (iTarget - box.offsetLeft)/n; //剩余路程的1/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);