如何将计数器值显示到输出中以开始倒计时

时间:2015-12-21 23:55:45

标签: javascript

我正在建立一个柜台并且有一些问题。我有一个计数器字段,其中增量和减量发生(默认情况下,它是5分钟)。什么时候开始'按下按钮最终计数器的数字应设置为输出字段中的计时器。 这是我的解决方案:

;(function(){
  var output = document.querySelector('#output'),
    btn = document.querySelector('button'),
    min = 5,
    sec = min * 60,
    timer;

setCount(min);

  function setCount(n){
    var c = document.querySelector('#counter'),
        increment = c.children[1].children[0],
        decrement = c.children[1].children[2],
        num  = c.children[1].children[1];      

    increment.onclick = function(){
      if(n >= 1) {num.textContent = ++n;}
    };  

    decrement.onclick = function(){
      if(n > 1) {num.textContent = --n;}
    };  
    num.textContent = n;
   }

  function setTimer(){

    var currentMin = Math.round((sec - 30) / 60),
        currentSec = sec % 60;

    if(currentMin >= 0 ) {currentMin = '0' + currentMin;}
    if(currentSec <= 9 ) {currentSec = '0' + currentSec;}  
    if(sec !== 0){sec--;}
    timer = setTimeout(setTimer,10);  // 10 is for the speedy
    output.textContent = currentMin + ':' + currentSec;  
  }

  btn.addEventListener('click', setTimer, false);
  })();

这是链接:JS Bin

1 个答案:

答案 0 :(得分:1)

<强> TL; DR

if(n >= 1) {num.textContent = ++n; sec = n * 60;} // Line 15
...
if(n > 1) {num.textContent = --n; sec = n * 60; } // Line 19

您的计时器从秒中获取它的起始最小值,该值始终等于5 * 60。每次点击+-时,您都需要更新秒数。

(function() {
  var output = document.querySelector('#output');
  var btn = document.querySelector('button');
  var min = 5;
  var sec = min * 60;
  var timer;

  var counter = document.querySelector('#counter ul');
  var increment = counter.children[0];
  var decrement = counter.children[2];
  var number = counter.children[1];
  number.textContent = min;

  increment.onclick = function() {
    min++;
    number.textContent = min;
    sec = min * 60;
  };

  decrement.onclick = function() {
    min--;
    if (min < 1) {
      min = 1;
    }
    sec = min * 60;
    number.textContent = min;
  };

  function setTimer() {
    var currentMin = Math.round((sec - 30) / 60),
      currentSec = sec % 60;

    if (currentMin == 0 && currentSec == 0) {
      output.textContent = '00:00';
      return;
    } else {
      timer = setTimeout(setTimer, 10);
    }

    if (currentMin <= 9) {
      currentMin = '0' + currentMin;
    }
    if (currentSec <= 0) {
      currentSec = '0' + currentSec;
    }
    if (sec !== 0) {
      sec--;
    }
    output.textContent = currentMin + ':' + currentSec;
    console.log('currentMin: ' + currentMin);
  }

  btn.addEventListener('click', setTimer, false);

})();
#wrapper {
  width: 300px;
  border: 1px solid #f00;
  text-align: center;
}
#output {
  height: 40px;
  line-height: 40px;
  border-bottom: 1px solid #f00;
}
h4 {
  margin: 10px 0;
}
ul {
  margin: 0;
  padding: 0;
}
li {
  list-style: none;
  width: 40px;
  height: 40px;
  line-height: 40px;
  display: inline-block;
  border: 1px solid #f00;
}
li:nth-child(odd) {
  cursor: pointer;
}
button {
  padding: 5px 15px;
  margin: 10px 0;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>

<body>
  <div id="wrapper">
    <div id="output"></div>
    <div id="counter">
      <h4>counter</h4>
      <ul>
        <li>+</li>
        <li></li>
        <li>-</li>
      </ul>
    </div>
    <button id="start">start</button>
  </div>
</body>

</html>