[英]Increase and decrease a variable until a number is reached in Javascript
如何在 Javascript 中增加和减少变量直到 100,当达到 100 时它应该开始减少。
所以accuracyBarValue
应该从0开始,增加到100,当达到100时它应该去0,然后重复这个过程。
这以 10 为间隔。
我在一个非常简单的 JS 游戏中使用它,该值用于增加和减少 PowerBar。
这是另一种看法:
var up = true; var value = 0; var increment = 10; var ceiling = 100; function PerformCalc() { if (up == true && value <= ceiling) { value += increment if (value == ceiling) { up = false; } } else { up = false value -= increment; if (value == 0) { up = true; } } document.getElementById('counter').innerHTML = 'Value: ' + value + '<br />'; } setInterval(PerformCalc, 1000);
<div id="counter"></div>
for (var i=0;i<100;i++)
{
document.write("The number is " + i);
document.write("<br />");
}
while (i>0)
{
i -= 10;
document.write("The number is " + i);
document.write("<br />");
}
您可以在此处对其进行测试和修改。
代码
let i = 100;
setInterval(() => {
console.log(Math.abs((i+=10)%200 - 100))
}, 1000);
解构
i+=10
→ i
在每个刻度上无限增加 10%100
→ 最大值两倍的模数(除法剩余,例如10 % 6 = 4
)- 100
→ 删除范围(因此数字将始终在 100 和 -100 之间,否则将在 0 和 6 之间)Math.abs()
→ 删除 -(确保数字从 0 移动到 100 并返回)步骤可视化
我++
∞ .
.
.
/
/
/
/
0
(i+=10)%200
200
/ / / .
/ / / .
/ / / .
/ / / /
/ / / /
0
i++%200-100
100
\ /\ /\
\ / \ / \
0 \ / \ / .
\ / \ / .
\/ \/ .
-100
Math.abs(i++%200-100)
100
\ /\ /.
\ / \ / .
\/ \/ .
0
实现示例
const max = 10; let i = max; const $body = document.querySelector('body'); setInterval(() => { const val = Math.abs(i++%(max * 2) - max); const $el = document.createElement('i'); $el.style = `--i: ${i}; --val: ${val}`; $body.appendChild($el); window.scrollTo(window.innerWidth, 0); console.log(val); }, 200);
i { --i: 0; --val: 0; --size: 10px; position: absolute; background: black; width: var(--size); height: var(--size); top: var(--size); left: calc(-10 * var(--size)); transform: translate( calc(var(--i) * var(--size)), calc(var(--val) * var(--size)) ) }
替代方法(基于浮动)
Math.acos(Math.cos(i * Math.PI)) / Math.PI;
或者
Math.abs(i - Math.floor(i) - .5);
其中i
是0
- Infinity
之间的float
。 结果也是一个float
,需要乘以最大值并四舍五入(目标值)。
另一种允许您指定持续时间和帧速率的方法。 对于动画和一段时间内发生的事情非常有用。
<h2>Increment Value over a Duration with a given framerate</h2>
Value: <span id="value">0</span>
var valueElement = document.getElementById('value');
var start = 0;
var end = 100;
var duration = 10000; // In milliseconds (divide by 1000 to get seconds).
var framerate = 50; // In milliseconds (divide by 1000 to get seconds).
var toAdd = ( ( end - start ) * framerate ) / duration;
var interval = setInterval(function() {
var currentValue = parseFloat(valueElement.innerHTML);
if (currentValue >= end) {
clearInterval(interval);
return;
}
valueElement.innerHTML = (!isNaN(currentValue) == true ? currentValue + toAdd : toAdd);
}, framerate);
https://jsfiddle.net/joshuapinter/8uasm7ko/
我想显示增量值,但您也可以轻松地将其包装为通用函数。
var i = 0;
while( i < 100 )
{
i++;
}
while( i > -1 )
{
i--;
}
显然,您还可以在while
循环中执行其他代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.