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