【问题标题】:Creating a Custom Countdown Timer创建自定义倒数计时器
【发布时间】:2020-10-18 22:13:59
【问题描述】:

我是一名平面设计师,还负责为我工作的教堂建立网站。我过去建立了很多网站,所以这根本不是问题,但是,我希望对这个网站做的事情是拥有尽可能多的元素,这些元素可以简单地单独运行。在 JavaScript 方面,我是一个完全的初学者,老实说,我完全不知道我在做什么。

我希望新网站有一个自定义倒计时计时器,它会倒计时到我们上线的时间,然后在设定的时间段内显示我们的直播链接,然后重置。下面的代码显示了我已经设法通过在互联网上搜索而编写的内容。它的问题在于它依赖于一个人(其中一半时间是网络志愿者)记住在当前服务完成后将日期和时间更改为下一个服务,而 90% 的时间他们忘记了.

在理想情况下,我希望此倒计时计时器自动倒计时到最近的星期二下午 6:00,然后显示指向我们直播的链接 20 分钟,然后重置。或者,如果周日上午 10:00 先到,则倒计时到周日上午 10 点,然后显示我们的直播链接 1 小时 15 分钟,然后重置。从理论上讲,我想这可以无限期地运行,因为它只会检查周二下午 6 点是否先到,或者周日上午 10 点先到,然后倒计时到这些时间,暂停,显示一些超链接文本,然后重复。

如果这里已经讨论过这个问题,我深表歉意,我尝试尽可能彻底地搜索,但找不到任何东西。

任何帮助都将不胜感激。

<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

<p id="demo" class="countdown-live" style="text-align:center;"></p>

<script>
// Set the date we're counting down to
var countDownDate = new Date("October 20, 2020 18:00:00").getTime();

// Update the count down every 1 second
var x = setInterval(function() {

  // Get todays date and time
  var now = new Date().getTime();
    
  // Find the distance between now and the count down date
  var distance = countDownDate - now;
    
  // Time calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);
    
  // Output the result in an element with id="demo"
  document.getElementById("demo").innerHTML = days + " d " + hours + " h "
  + minutes + " m & " + seconds + " s";
    
  // If the count down is over, write some text 
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = '<a href="https://newhopechurchtn.org/new-hope-online">Watch Live!</a>';
  }
}, 1000);
</script>

</body>
</html>

【问题讨论】:

  • 比在每个事件后手动输入日期更好的解决方案是运行一个简单的 HTTP 服务器并使用 AJAX 获取您需要的数据。这样一来,您就可以将接下来几个月的全部日程安排好并让它自动更新。它还可以使您的网站无论系统时钟多么混乱都可以正常工作。

标签: javascript timer countdowntimer


【解决方案1】:

这有点延迟,但这里有一些需要维护的东西。

(() => {
  var currentDate = new Date();
  currentDate = currentDate.toLocaleString("en-US", {
    timeZone: "America/New_York"
  });

  // Service times    
  var serviceTEN = "2021/12/06 11:15";
  var serviceTWELVE = "2021/12/06 13:45";
  var serviceTWO = "2021/12/06 15:45";
  var serviceFIVE = "2021/12/06 16:45";
  var serviceSEVEN = "2021/12/06 19:45";
  var waiting;

  // Set current service
  var currentService = serviceTEN;


  function pad(num, size) {
    var s = "0" + num;
    return s.substr(s.length - size);
  }

  // Get the current time, set the correct timezone, and parse it to the same layout.
  // Find the difference between the current date and the service time. 
  // Have that be the time remaining.
  function getTimeRemaining(endtime) {
    var now = new Date();
    now = now.toLocaleString("en-US", {
      timeZone: "America/New_York"
    });

    // Parse the date to find each variable (seconds, minutes, hours, days)

    let t = Date.parse(endtime) - Date.parse(now);
    let seconds = Math.floor((t / 1000) % 60);
    let minutes = Math.floor((t / 1000 / 60) % 60);
    let hours = Math.floor((t / (1000 * 60 * 60)) % 24);
    let days = Math.floor(t / (1000 * 60 * 60 * 24));

    return {
      total: t,
      days: days,
      hours: hours,
      minutes: minutes,
      seconds: seconds,
    };
  }

  // the id refers to "js-clock" which is the beginning of the ID, this can be changed
  function clock(id, endtime) {
    let days = document.getElementById(id + "-days");
    let hours = document.getElementById(id + "-hours");
    let minutes = document.getElementById(id + "-minutes");
    let seconds = document.getElementById(id + "-seconds");

    let timeinterval = setInterval(function() {
      let t = getTimeRemaining(endtime);

      // Look through the service times and figure out which service it should be.
      if (t.total <= 0) {
        if (waiting === true) {
          location.reload();
        } else if (t.total < -300000) {
          switch (endtime) {
            case serviceTEN:
              endtime = serviceTWELVE;
              break;
            case serviceTWELVE:
              endtime = serviceTWO;
              break;
            case serviceTWO:
              endtime = serviceFIVE;
              break;
            case serviceFIVE:
              endtime = serviceSEVEN;
              break;
            default:
              break;
          }
        } else {
          clearInterval(timeinterval);
        }
      } else {
        waiting = true;
        // Edit the 2 or 3 to change amount of digits
        days.innerHTML = pad(t.days, 3);
        hours.innerHTML = pad(t.hours, 2);
        minutes.innerHTML = pad(t.minutes, 2);
        seconds.innerHTML = pad(t.seconds, 2);
      }
    }, 1000);
  }

  clock("js-clock", currentService);
})();
<div class="mainOverlayCountdown-k" id="mainOverlayCountdownID-k">
  <h1 id="countdownHeader-k">Next service begins in:</h1>
  <div class="countdown-cover">
    <div id="js-clock" class="countdowntimer">

      <div id="js-clock-days" class="clock-number">00</div>
      <div class="clock-label">Days</div>

      <div id="js-clock-hours" class="clock-number">00</div>
      <div class="clock-label">Hrs</div>

      <div id="js-clock-minutes" class="clock-number">00</div>
      <div class="clock-label">Min</div>

      <div id="js-clock-seconds" class="clock-number">00</div>
      <div class="clock-label">Sec</div>
    </div>
  </div>
</div>

要更改服务时间,请编辑服务'TIME' 变量。您可能必须尝试使用​​它才能获得正确的时区。

添加/删除服务时间,但请确保您还在设置日期的变量和开关功能中添加/删除它。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    JAVASCRIPT CSS HTML 代码:

    <script>
    // Set the date we're counting down to
    // you can set according your own need
    var countDownDate = new Date("Jan 1, 2022 15:37:25").getTime();
    
    // Update the count down every 1 second
    var x = setInterval(function() {
    
      // Get today's date and time
      var now = new Date().getTime();
        
      // Find the distance between now and the count down date
      var distance = countDownDate - now;
        
      // Time calculations for days, hours, minutes and seconds
      var days = Math.floor(distance / (1000 * 60 * 60 * 24));
      var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
      var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
      var seconds = Math.floor((distance % (1000 * 60)) / 1000);
        
      // Output the result in an element with id="demo"
      document.getElementById("demo").innerHTML = days + "d " + hours + "h "
      + minutes + "m " + seconds + "s ";
        
      // If the count down is over, write some text 
      if (distance < 0) {
        clearInterval(x);
        document.getElementById("demo").innerHTML = "Wait Is Over";
      }
    }, 1000);
    </script>
    
    
    CSS part
    <style>
    p {
      text-align: center;
      font-size: 60px;
      margin-top: 0px;
    }
    </style>
    
    
    HTML part
    &lt;p id="demo"&gt;&lt;/p&gt;

    【讨论】:

      猜你喜欢
      • 2019-02-13
      • 1970-01-01
      • 2019-07-10
      • 2015-11-13
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多