關(guān)于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
舉報
2015-12-25
而是卡在了-19px那里,不再動了。肉眼看上去沒問題,是因為當(dāng)鼠標(biāo)移出的時候定時器被關(guān)閉。程序不會報錯,但其實邏輯已經(jīng)錯了。如果說定時器是一個循環(huán)體的話,程序顯然在鼠標(biāo)移入的時候進(jìn)入了死循環(huán)。
2015-12-25
想問一下樓主的speed公式是跟老師一樣嗎?老師的公式是:speed=(iTarget-oDiv.offsetLeft)/20. 當(dāng)鼠標(biāo)移入觸發(fā)onmouseover事件的時候,offsetLeft=-19時,speed=0;則oDiv.style.left不會再變化,即offsetLeft也不會再變,那么此時,定時器的if判斷oDiv.offsetLeft==iTarget等式永遠(yuǎn)不成立,定時器不會被關(guān)閉,而且oDiv的offsetLeft并沒有等于0,也就是說oDiv這個模塊并沒有被完全移出
2015-10-19
剛剛測試了一下,說下我的理解。
首先明白一點:為什么會出現(xiàn)left = -190.5/…,這種小數(shù),是因為speed的值為小數(shù)。
????【使用Math方法,不管是向上取整ceil(),還是向下取整floor(),都是為了去整,不讓left值出現(xiàn)小數(shù)】。
其次:在一次一次執(zhí)行
????這句代碼時,speed的值會越來越小,最后無限接近與0。
最后:再來看這句代碼
????假設(shè):1、speed>0 ?----> ?speed = 0.5;執(zhí)行后 speed = Math.ceil(0.5) = 1;
????????????????????left = oDivoffsetLeft + 1;注意這里直接加了1,而不是0.5或是下一輪會更小的speed(0.25/0.025等)
????????????? 2、 speed<0 ?----> ?speed = -0.5;執(zhí)行后 speed = Math.floor(0.5) = -1;
?????????????????????left = oDivoffsetLeft - 1;注意這里直接減了1,而不是0.5或是下一輪會更小的speed(0.25/0.025等)
所以,我認(rèn)為,向上去整還是向下去整都是為了,讓left的改變更加的快刀斬亂麻,不會造成無限趨近于0/-200,卻永遠(yuǎn)變不成0/-200;
2015-10-15
(iTarget-context.offsetLeft)/20 分子在無線變小趨近于零卻不會等于零 其整體(iTarget-context.offsetLeft)/20 無線接近零,而不是等于零,Math把他清零,關(guān)閉定時器 如果不用math定時器一直在跑,只是速度趨近零,肉眼看不到而已。 可以自己做一個測試在控制臺打印出console.log(oDiv.offsetLeft==iTarget) 即使加了Math定時器也不一定停止
2015-07-28
我現(xiàn)在的觀點是,在speed>0時,在speed減小到0<speed<1的階段,如果使用了Math.floor,那么speed就變成0了,那么Left就沒辦法達(dá)到0,而使用Math.ceil,在speed減小到0<speed<1的階段,speed值就是取1,那么Left就能繼續(xù)移動直到達(dá)到0。
2015-07-28
在speed>0時,如果用Math.floor(speed),Left沒辦法達(dá)到0……至于原因我也想知道!