增加和减少变量,直到在javascript中达到一个数字

时间:2011-03-31 07:33:25

标签: javascript variables loops javascript-events

如何在javascript中增加和减少变量直到100,当达到100时,它应该开始减少。

因此,accuracyBarValue应该从0开始,增加到100,当达到100时,它应该变为0,然后重复过程。

以10为间隔。

我在一个非常简单的JS游戏中使用它,这个值用于增加和减少PowerBar。

提前致谢。

5 个答案:

答案 0 :(得分:11)

以下是对此的另一种看法:

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>

答案 1 :(得分:4)

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 />");
}

您可以对其进行测试和修改here

答案 2 :(得分:1)

使用持续时间和帧速率。

另一种允许您指定持续时间和帧速率的方法。对动画和一段时间内发生的事情非常有用。

HTML

<h2>Increment Value over a Duration with a given framerate</h2>
Value: <span id="value">0</span>

的JavaScript

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);

的jsfiddle

https://jsfiddle.net/joshuapinter/8uasm7ko/

我想显示增量值,但您也可以轻松将其包装到通用函数中。

答案 3 :(得分:0)

var i = 0;
while( i < 100 )
{
    i++;
}

while( i > -1 )
{
    i--;
}

显然,你也可以在while循环中执行其他代码。

答案 4 :(得分:0)

代码

let i = 100;
setInterval(() => {
  console.log(Math.abs((i+=10)%200 - 100))
}, 1000);

解构

  1. i+=10i每次滴答地无限增加10点
  2. %100→取两倍于最大值的模(除以10 % 6 = 4之后的除数)
  3. - 100→删除范围(因此数字将始终在100和-100之间,否则将在0和6之间)
  4. Math.abs()→删除-(确保数字从0到100并返回)

可视化的步骤

i ++

∞       .
       .
      .
     /
    /
   / 
  /
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);

ifloat-0之间的Infinity。结果也是float,也需要乘以最大和四舍五入(目标值)。