亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于speed = speed>0?Math.ceil(speed):Math.floor(speed);代碼的問題。

為什么在speed>0時,要選擇Math.ceil(speed),在speed<0時,要選擇Math.floor(speed)呢?我在這個demo中,只是使用Math.floor(speed),沒有任何問題啊。。。。。求老師給予解答,謝謝??!

正在回答

6 回答

而是卡在了-19px那里,不再動了。肉眼看上去沒問題,是因為當鼠標移出的時候定時器被關閉。程序不會報錯,但其實邏輯已經錯了。如果說定時器是一個循環體的話,程序顯然在鼠標移入的時候進入了死循環。

0 回復 有任何疑惑可以回復我~

想問一下樓主的speed公式是跟老師一樣嗎?老師的公式是:speed=(iTarget-oDiv.offsetLeft)/20. 當鼠標移入觸發onmouseover事件的時候,offsetLeft=-19時,speed=0;則oDiv.style.left不會再變化,即offsetLeft也不會再變,那么此時,定時器的if判斷oDiv.offsetLeft==iTarget等式永遠不成立,定時器不會被關閉,而且oDiv的offsetLeft并沒有等于0,也就是說oDiv這個模塊并沒有被完全移出


0 回復 有任何疑惑可以回復我~

剛剛測試了一下,說下我的理解。

首先明白一點:為什么會出現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;

3 回復 有任何疑惑可以回復我~

(iTarget-context.offsetLeft)/20 分子在無線變小趨近于零卻不會等于零 其整體(iTarget-context.offsetLeft)/20 無線接近零,而不是等于零,Math把他清零,關閉定時器 如果不用math定時器一直在跑,只是速度趨近零,肉眼看不到而已。 可以自己做一個測試在控制臺打印出console.log(oDiv.offsetLeft==iTarget) 即使加了Math定時器也不一定停止

0 回復 有任何疑惑可以回復我~
#1

慕UI8183041

為什么顯示 Uncaught ReferenceError: oDiv is not defined(…)
2015-12-16 回復 有任何疑惑可以回復我~

我現在的觀點是,在speed>0時,在speed減小到0<speed<1的階段,如果使用了Math.floor,那么speed就變成0了,那么Left就沒辦法達到0,而使用Math.ceil,在speed減小到0<speed<1的階段,speed值就是取1,那么Left就能繼續移動直到達到0。

4 回復 有任何疑惑可以回復我~
#1

wengyaqiang

明確地說,就是這樣的。
2015-07-28 回復 有任何疑惑可以回復我~

在speed>0時,如果用Math.floor(speed),Left沒辦法達到0……至于原因我也想知道!

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于speed = speed>0?Math.ceil(speed):Math.floor(speed);代碼的問題。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號