我有以下要优化的循环:
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的相位&lt; 5,因为它在那之后重复。如何使其对应,以便当for循环在i = 25时,循环得到正确的相位(在这种情况下它将为0)。
答案 0 :(得分:1)
将5个值的结果存储到临时数组中。
然后用5表示模数,应该给你相同的结果。
我要说的一件事是,要注意在Javascript中进行优化,有时候你可能认为你的制作速度更快,但实际上可能并非如此。例如。 Chromes 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}`);
}