倒计时器上的暂停/恢复功能(Javascript)

问题描述 投票:0回答:1

目前正在创建一个 25 分钟倒计时器,带有计时递增/递减按钮。我设法创建计时器并在按下“开始”按钮时让它工作,但我正在努力寻找一种方法来插入一个函数,以在按下“暂停”按钮时暂停它并在按下“开始”按钮时恢复。我已经检查了有关此问题的多个线程,但我无法使建议的解决方案符合我的逻辑。任何提示将不胜感激。请在下面找到我的代码:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>25 + 5 Clock</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous">
    <link rel="stylesheet" href="./styles/styles.css">

    <style>
      * {
  text-align: center;
  }
    </style>


  </head>
  <body>
    <h1>25 + 5 Clock</h1>
    <div class="row" id="columnas">

    <div class="col" id="break-label">Hey you!
    <div class="5">
        <button id="break-decrement" class="btn btn-primary" type="button" name="button" onclick="breakDec()">break-dec</button>
        <div id="break-length">5</div>
        <button id="break-increment" class="btn btn-primary" type="button" name="button" onclick="breakInc()">break-inc</button>
    </div>
    </div>


    <div class="col" id="session-label">Session length
    <div class="25">
      <button id="session-decrement" class="btn btn-success" type="button" name="button" onclick="sessionDec()">session-dec</button>
      <div id="session-length">25</div>
      <button id="session-increment" class="btn btn-success"   type="button" name="button" onclick="sessionInc()">session-inc</button>
    </div>
    </div>

    </div>



    <div class="tiempo">
          <div id="timer-label">Session</div>
          <div id="time-left">
            <span class="minutes_value" id="minute_value">25</span>:
            <span class="seconds_value" id="second_value">00</span>
            </div>
    </div>

    <div class="botones">
    <button id="start_stop" type="button" name="button" onclick="alertMe()">Start</button>
    <button id="reset" type="button" name="button">Reset</button>
    </div>

    <button type="button" name="button" id="clickButton">Pause</button>

    <! -- Break decrement      -->
    <script>

      function breakDec() {
        if (document.getElementById("break-length").innerHTML <= "1") {
          document.getElementById("break-length").innerHTML === parseFloat(1)
        }
        else {document.getElementById("break-length").innerHTML = parseFloat(document.getElementById("break-length").innerHTML) - parseFloat( 1)}

      }
    </script>

    <! -- Break increment      -->
<script>
    function breakInc() {
      document.getElementById("break-length").innerHTML = parseFloat(document.getElementById("break-length").innerHTML) + parseFloat( 1)
    }
  </script>

  <! -- session decrement      -->

      <script>

        function sessionDec() {

          if (document.getElementById("session-length").innerHTML <= 1) {
            document.getElementById("session-length").innerHTML === parseFloat(1)
          } else
          {document.getElementById("session-length").innerHTML = parseFloat(document.getElementById("session-length").innerHTML) - parseFloat( 1);
          document.getElementById("minute_value").innerHTML = parseFloat(document.getElementById("minute_value").innerHTML) - parseFloat( 1);}
        }
      </script>

      <! -- Session increment      -->
  <script>
      function sessionInc() {
        document.getElementById("session-length").innerHTML = parseFloat(document.getElementById("session-length").innerHTML) + parseFloat( 1);
        document.getElementById("minute_value").innerHTML = parseFloat(document.getElementById("minute_value").innerHTML) + parseFloat( 1);
      }
    </script>

    <! -- *****************************************************************************************      -->
    <! -- C          O          U          N          T          D          O          W          N      -->
    <! -- *****************************************************************************************      -->
    <! -- *****************************************************************************************      -->
    <! -- *****************************************************************************************      -->

    <script>

    function alertMe()  {

      const deadlineTime = new Date(new Date().getTime() + parseFloat(document.getElementById("minute_value").innerHTML) * 60000);
      setInterval(function() {

    //current time
    const currentTime = new Date();

    //show the start time, equivalent to 5 minutes(300000)
    const time_start = deadlineTime - currentTime;

    //converting the time in minutes
    const min_info = Math.floor((time_start % (1000 * 60 * 60)) / (1000 * 60));

    //converting time in seconds
    const sec_info = Math.floor((time_start % (1000 * 60)) / 1000);

    //mostrar temporizador
    document.getElementById("minute_value").innerHTML = min_info;
    document.getElementById("second_value").innerHTML = sec_info;

    if (time_start < 0) {
      clearInterval(alertMe);
      document.getElementById("minute_value").innerHTML = "0";
      document.getElementById("second_value").innerHTML = "0";
    }

     }, 5);

}

</script>

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-HwwvtgBNo3bZJJLYd8oVXjrBZt8cqVSpeBNS5n7C8IVInixGAoxmnlMuBnhbgrkm" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-Rx+T1VzGupg4BHQYs2gCW9It+akI2MM/mndMCy36UVfodzcJcF0GGLxZIzObiEfa" crossorigin="anonymous"></script>
    <script src="https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js" charset="utf-8"></script>


  </body>
</html>

javascript function countdown countdowntimer pause
1个回答
0
投票

这是一个非常简单但有效的解决方案。

创建一个新的顶级变量,如

let started = false

然后,对按钮进行编码,以便开始按钮将其设置为 true,暂停按钮将其设置为 false。然后,在超时开始时检查

started
是否为
false
,如果是,则为
return
,这将在该时间间隔内停止运行该函数。

let started = false;

// ...etc

setInterval(()=>{
    if(!started) return;
    // ...etc
}, 5)
© www.soinside.com 2019 - 2024. All rights reserved.