第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

關(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),沒有任何問題啊。。。。。求老師給予解答,謝謝??!

正在回答

6 回答

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

0 回復(fù) 有任何疑惑可以回復(fù)我~

想問一下樓主的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這個模塊并沒有被完全移出


0 回復(fù) 有任何疑惑可以回復(fù)我~

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

首先明白一點:為什么會出現(xiàn)left = -190.5/…,這種小數(shù),是因為speed的值為小數(shù)。

????oDiv.style.left?=?oDiv.offsetLeft?+?speed?+?'px';

????【使用Math方法,不管是向上取整ceil(),還是向下取整floor(),都是為了去整,不讓left值出現(xiàn)小數(shù)】。

其次:在一次一次執(zhí)行

????var?speed?=?(iT?-?oDiv.offsetLeft)/20;

????這句代碼時,speed的值會越來越小,最后無限接近與0。

最后:再來看這句代碼

????speed?=?speed>0?Math.ceil(speed):Math.floor(speed);

????假設(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;

3 回復(fù) 有任何疑惑可以回復(fù)我~

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

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕UI8183041

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

我現(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。

4 回復(fù) 有任何疑惑可以回復(fù)我~
#1

wengyaqiang

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

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

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

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

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號