簡體   English   中英

如何用模優化函數?

[英]How do I optimize a function with modulo?

我有以下要優化的循環:

var items = document.querySelectorAll('.mover');

for (var i = 0; i < items.length; i++) {
  var phase = Math.sin((document.body.scrollTop/1250) + (i % 5));
  items[i].style.left = items[i].basicLeft + 100 * phase + 'px';
}

當我控制台記錄階段的輸出時。 console.log(phase)我意識到我得到了相同的5個數字。

例如:假設items.length = 200 這些是階段的結果。

i = 0  phase = 0
i = 1  phase = 0.84147
i = 2  phase = 0.90929
i = 3  phase = 0.14112
i = 4  phase = -0.75680
i = 5  phase = 0
i = 6  phase = 0.84147
i = 7  phase = 0.90929
i = 8  phase = 0.14112
i = 9  phase = -0.75680
i = 10  phase = 0
i = 11  phase = 0.84147
i = 12  phase = 0.90929
i = 13  phase = 0.14112
i = 14  phase = -0.75680

等等

我要走這條線

var phase = Math.sin(var scrollTop = document.body.scrollTop/1250; + (i % 5));

在for循環之外,但我不知道如何將正確的相數傳回循環。

所以我只想計算i <5的相位,因為它會在此之后重復。 我如何使其對應,以便當for循環在i = 25時,該循環獲得正確的相位(在這種情況下,該相位將為0)。

將5個值的結果存儲到一個臨時數組中。

然后,模數為5的結果應該相同。

我要說的一件事,是要意識到Java語言中的過度優化,有時您可能會認為使事情做得更快,但實際上可能並非如此。 例如。 Chrome V8引擎甚至可能檢測到該模式。 如今,JIT編譯器做了一些聰明的事情。

 var items = Array(10), modvar = [], i; for (i = 0; i < 5; i++) modvar[i] = Math.sin((document.body.scrollTop/1250) + (i % 5)); for (i = 0; i < items.length; i++) { var phase = modvar[i%5]; console.log(`i = ${i} phase = ${phase}`); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM