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

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

為什么向右移動時是向上取整,然后向左移動是向下取整?

為什么向右移動時是向上取整,然后向左移動是向下取整?

正在回答

3 回答

比如移動到的目標值是300px,通過300減去當前的坐標0,再除以20,結果是15,div以15的速度向右移動,這是第一次定時器執行的結果。30毫秒后再執行一次,目標移動到了15,通過300減去當前坐標15結果是285,285除以20結果的14.25,這樣一次次運算下來,速度越來越小,比如速度是15、14.25、12.73、7.2。。。。這樣的。

由于數值設置的原因,div移動到一定px后,進行相減再除20的運算后會出現小數,比如0.75,比如這時div移動到了290,程序里寫到div的left=oDiv.offsetLeft+speed+'px',那么div的left就是290.75px,而瀏覽器是不允許出現小數的,會把0.75去掉,那么div的left就成了290,下次執行時div的left是290,算出來速度還是0.75,瀏覽器又省略了小數,結果就是div停在了290px,到不了目標點300。

為了解決這個問題,Math.ceil就派上用場了,它會把0.75向上取整為1,這樣div就又可以向右移動1px了,這時里目標點很近了,就以1的速度慢慢到達300,然后停止定時器。
同理,向左移動,計算出來的速度會是負值比如-0.75,就用Math.floor把速度向下取整為-1,這樣,就避免了卡在某個像素點不動的問題。
Math.floor還是ceil這些運算的目的不是要把speed取到0,而是要讓瀏覽器可以繼續運算下去,然后用我們的if條件判斷,等于itarget了就結束運動。

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

DOMOHAHA 提問者

非常感謝!講的非常清楚
2016-02-22 回復 有任何疑惑可以回復我~
#2

qq_風_54

請問,瀏覽器會忽略小數的話為什么例子里面會出現190.5px呢
2016-03-13 回復 有任何疑惑可以回復我~
#3

qq_風_54 回復 慕容6759333

非常感謝,這個問題找了好久沒找到答案,再次謝謝
2016-03-13 回復 有任何疑惑可以回復我~
查看1條回復

不是還是負的嗎?offsetLeft

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

因為向右移動offsetLeft為正值,如果向下取整就會大于目標值,不符合條件,向左同理

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

DOMOHAHA 提問者

不是還是負的嗎?offsetLeft
2016-02-17 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么向右移動時是向上取整,然后向左移動是向下取整?

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

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

幫助反饋 APP下載

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

公眾號

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