使用JS的倒数计时器

时间:2019-08-16 18:12:12

标签: javascript timer countdown

需要为在线测验创建倒数计时器。 用户进入网页后,计时器应立即启动。

尝试了这段代码。

<
script >
    var fiveMinutes = 3600;
var display = document.getElementById('time');
var myTimer;

function startTime(duration, display) {
    var start = Date.now(),
        diff,
        minutes,
        seconds;

    function timer() {
        diff = duration - (((Date.now() - start) / 1000) | 0);
        minutes = (diff / 60) | 0;
        seconds = (diff % 60) | 0;
        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;
        display.textContent = minutes + ":" + seconds;
        if (diff <= 0) {
            display.textContent = "TIME IS UP!";
            clearInterval(myTimer);
        }
    };
    timer();
    myTimer = setInterval(timer, 1000);
}
window.onload = function() {
    startTime(fiveMinutes, display);
}; 

不是从当前时刻开始计数,而是从startTime变量中指定的日期开始计数。为了方便起见,我们考虑它与Date.now()的返回值完全相同的格式。

我需要获取一个变量,为其提供一个值(不是Date.now()),并将其用作起点

事先感谢

3 个答案:

答案 0 :(得分:0)

所以我不确定这是否是您想要的。当用户进入页面时,这将触发。但是您的评论令人困惑。您是要在页面加载时还是在某个时间基于变量启动此操作?

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    <link rel="stylesheet" type="text/css" href="CSS/styles.css">
    <title>DesignLover-Question</title>
</head>
<body>
    <div class="main">
        <div class="header">
            <div class="logo">
                <a href="https://www.walumozagba.com">
                    <embed src="https://collartocuff.files.wordpress.com/2010/01/chanel-logo-png-image-e1512737281632.png"  alt="logo" width="500px">
                </a>
            </div>
            <h3><span id="count">1</span>/17</h3>
        </div>
        <div class="body">
            <div class="about">
                    <h1>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla <a href="mailto:info@walumozagba.com">pariatur</a>. <br><br>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</h1>
            </div>
            <div class="work">
                <h2 class="image" data-index="0"></h2>
                <h2 class="image clonefirst" data-index="1"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image clonelast" data-index="17"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="1"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="2"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="3"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="4"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="5"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="6"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="7"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="8"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="9"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="10"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="11"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="12"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="13"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="14"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="15"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="16"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
                <h2 class="image" data-index="17"><img src="https://media.architecturaldigest.in/wp-content/uploads/2016/09/Indian-minimalism_041.jpg"></h2>
            </div>
            <div class="buttons">
                <button class="prev">PREV</button>
                <button class="next">NEXT</button>
            </div>
        </div>
        <div class="footer">
                <div class="phone">
                        <p>+31 123 12 12 12</p>
                </div>
                <ul class="media">
                    <li><a href="https://www.behance.net/walum" target="_blank">Behance</a></li>
                    <li><a href="https://www.facebook.com/itswalu/" target="_blank">Facebook</a></li>
                    <li><a href="https://www.instagram.com/walumozagba/" target="_blank">Instagram</a></li>
                    <li><a href="mailto:info@walumozagba.com">Email</a></li>
                </ul>
            
        </div>
    </div>
    <script src="JS/scriptscroll.js" type="text/javascript"></script>
</body>
</html>

答案 1 :(得分:0)

不确定这是否是您要查找的内容,但这是一个简单的倒计时计时器,可在窗口中显示时间。

const display = document.getElementById('time');
const fiveminutes = 5 * 60 * 1000;

function timer(endTime) {
  var myTimer = setInterval(function() {
    let now = new Date().getTime();
    let diff = endTime - now;
    let minutes = Math.floor(diff % (1000 * 60 * 60) / (1000 * 60));
    let seconds = Math.floor(diff % (1000 * 60) / 1000);

    minutes = minutes < 10 ? `0${minutes}` : minutes;
    seconds = seconds < 10 ? `0${seconds}` : seconds;
    display.textContent = minutes + ":" + seconds;
    if (diff <= 0) {
      display.textContent = "TIME IS UP!";
      clearInterval(myTimer);
    }
  }, 100);
}

window.onload = timer(new Date().getTime() + fiveminutes);
span {
  font-family: calibri;
  font-size: 4em;
}
<body>
  <span id="time"></span>

答案 2 :(得分:0)

这是我一直在努力的事情,我在这里尝试为您提供解决方案。它仍然是越野车,但是也许它会给您一些想法,并且我将在有更多时间时尝试对其进行编辑。 (我希望它现在可以正常工作,但需要一些休息。)

const
  timeInput = document.getElementById("timeInput"),  
  nowBtn = document.getElementById("nowBtn"),
  durationInput = document.getElementById("durationInput"),
  confirmBtn = document.getElementById("confirmBtn"),
  display = document.getElementById("display");

let
  startTime,
  timeRemaining,
  chronos;


document.addEventListener("click", setUpTimer);
timeInput.addEventListener("focus", ()=>{ nowBtn.checked = false; });

function setUpTimer(event){
  
  // Makes sure the button was the target of the click before proceeding
  if(event.target == confirmBtn){
    if(nowBtn.checked){ // Puts the current time in the time input
      const
        clickTime = new Date(),
        hours = clickTime.getHours();
      let minutes = clickTime.getMinutes();
      clickTime.setSeconds(clickTime.getSeconds() + 1);
      minutes = minutes < 10 ? "0" + minutes : minutes;
      timeInput.value = `${hours}:${minutes}`;
    }
    const
      timeInputValue = timeInput.value,
      durationInputValue = durationInput.value;
    // Validates input (or complains and aborts)
    if(!timeInputValue || !durationInputValue){
      display.innerHTML = "Please choose a start time and duration"
      clearInterval(chronos);
      return;
    }
    const
      startArray = timeInputValue.split(":"),
      startHours = parseInt(startArray[0]),
      startMinutes = parseInt(startArray[1]),
      durationInMinutes = parseInt(durationInput.value),
      now = new Date();

    // Updates global variables that `countdown` function will need
    timeRemaining = durationInMinutes * 60;
    startTime = new Date();
    startTime.setHours(startHours, startMinutes);
    // In case startTime is supposed to be tomorrow
    const
      nowHrs = now.getHours(),
      strtHrs = startTime.getHours()
      nowMins = now.getMinutes(),
      strtMins = startTime.getMinutes();
    // If it looks like the hour already passed, it's probably an earlier hour tomorrow
    if(strtHrs < nowHrs || (strtHrs == nowHrs && strtMins < nowMins)){
      startTime.setDate(startTime.getDate() + 1);
    }

    // Announces successful timer setup and resets inputs
    const
      displayedHours = startTime.getHours(),
      storedMinutes = startTime.getMinutes(),
      displayedMinutes = storedMinutes < 10 ? "0" + storedMinutes : storedMinutes;
    display.innerHTML = `A ${durationInMinutes}-minute timer will start ` +       `at ${displayedHours}:${displayedMinutes}`;
    timeInput.value = "";
    nowBtn.checked = false;
    durationInput.value = "5";



    // `setInterval` calls `countdown` function every second

    console.log(startTime.toLocaleString());
    clearInterval(chronos);
    chronos = setInterval(countdown, 1000);

  }
}

function countdown(){

  if(timeRemaining <= 0){
    display.innerHTML = "TIME IS UP!";
    clearInterval(chronos);
  }
  else{
    const now = new Date();
    if(now.getTime() >= startTime.getTime()){
      updateDisplayedTime(timeRemaining--);
    }
  }
}

function updateDisplayedTime(totalSeconds){
  let
    minutes = Math.floor(totalSeconds / 60),
    seconds = totalSeconds % 60;
  minutes = minutes < 10 ? "0" + minutes : minutes;
  seconds = seconds < 10 ? "0" + seconds : seconds;
  display.innerHTML = `${minutes}:${seconds}`;
}
.inputContainer{ margin-bottom: 1em; }
#display{ font-size: 1.7em;}
#nowBtn {margin-left: 1em; }
<div class="inputContainer">
  <label>
    <div>Start timer at: </div>
    <input type="time" id="timeInput" />
  </label>
  <label>
    <input type ="checkbox" id="nowBtn" />
    <span>Now</span>
  </label>
</div>
<div class="inputContainer">
  <label>
    <div>Duration (minutes): </div>
    <input type="number" value="5" id="durationInput" min="1" max="1440" />
  </label>
</div>
<div class="inputContainer">
  <button id="confirmBtn">Confirm</button>
</div>
<div id="display"></div>