关于speed = speed>0?Math.ceil(speed):Math.floor(speed);代码的问题。
为什么在speed>0时,要选择Math.ceil(speed),在speed<0时,要选择Math.floor(speed)呢?我在这个demo中,只是使用Math.floor(speed),没有任何问题啊。。。。。求老师给予解答,谢谢!!
为什么在speed>0时,要选择Math.ceil(speed),在speed<0时,要选择Math.floor(speed)呢?我在这个demo中,只是使用Math.floor(speed),没有任何问题啊。。。。。求老师给予解答,谢谢!!
2015-07-10
刚刚测试了一下,说下我的理解。
首先明白一点:为什么会出现left = -190.5/…,这种小数,是因为speed的值为小数。
oDiv.style.left = oDiv.offsetLeft + speed + 'px';
【使用Math方法,不管是向上取整ceil(),还是向下取整floor(),都是为了去整,不让left值出现小数】。
其次:在一次一次执行
var speed = (iT - oDiv.offsetLeft)/20;
这句代码时,speed的值会越来越小,最后无限接近与0。
最后:再来看这句代码
speed = speed>0?Math.ceil(speed):Math.floor(speed);
假设:1、speed>0 ----> speed = 0.5;执行后 speed = Math.ceil(0.5) = 1;
left = oDivoffsetLeft + 1;注意这里直接加了1,而不是0.5或是下一轮会更小的speed(0.25/0.025等)
2、 speed<0 ----> speed = -0.5;执行后 speed = Math.floor(0.5) = -1;
left = oDivoffsetLeft - 1;注意这里直接减了1,而不是0.5或是下一轮会更小的speed(0.25/0.025等)
所以,我认为,向上去整还是向下去整都是为了,让left的改变更加的快刀斩乱麻,不会造成无限趋近于0/-200,却永远变不成0/-200;
举报