JavaScript实现简单的数字倒计时

下面我将详细讲解JavaScript实现简单的数字倒计时的完整攻略。

1. 实现思路

倒计时可以理解为是一段时间(比如30秒钟)的逆向计时,因此要实现数字倒计时,我们需要知道以下几个东西:

  • 终止时间(即倒计时结束时间)
  • 当前时间
  • 剩余时间(即终止时间减去当前时间)

有了以上三个数据,我们就可以通过JavaScript来实现数字倒计时,具体步骤如下:

  1. 获取元素

首先,我们需要获取页面上的倒计时元素,以便于在JavaScript中操作它。

var countdownElement = document.getElementById('countdown');
  1. 计算剩余时间

我们可以使用new Date()对象来获取当前时间,再减去终止时间,就可以得到剩余时间的毫秒数。

var endTime = new Date('2021-12-31 23:59:59');
var remainingTime = endTime.getTime() - new Date().getTime();
  1. 将剩余时间转换为天、时、分、秒格式

接下来,我们需要将剩余时间转换为天、时、分、秒格式。这可以通过一些简单的算术操作来完成。

var days = Math.floor(remainingTime / (1000 * 60 * 60 * 24));
var hours = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((remainingTime % (1000 * 60)) / 1000);
  1. 更新倒计时元素

最后一步,我们将天、时、分、秒格式的剩余时间展示到页面上的倒计时元素中。

countdownElement.innerHTML =
  "距离2022年元旦还有 " +
  days +
  " 天 " +
  hours +
  " 小时 " +
  minutes +
  " 分钟 " +
  seconds +
  " 秒";

2. 示例说明

这里提供两个示例,一个是基础版的数字倒计时,另一个是带有动态效果的数字倒计时。

示例1:基础版的数字倒计时

这个示例中,我们只展示了倒计时的基础版,比如没有样式、没有动态效果等。但它仍然可以给读者提供一个直观感受,让他们理解倒计时的实现原理。

<!DOCTYPE html>
<html>
  <head>
    <title>JavaScript实现简单的数字倒计时</title>
  </head>
  <body>
    <div id="countdown"></div>

    <script>
      var countdownElement = document.getElementById("countdown");

      var endTime = new Date("2021-12-31 23:59:59");
      var remainingTime = endTime.getTime() - new Date().getTime();

      var days = Math.floor(remainingTime / (1000 * 60 * 60 * 24));
      var hours = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
      var minutes = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60));
      var seconds = Math.floor((remainingTime % (1000 * 60)) / 1000);

      countdownElement.innerHTML =
        "距离2022年元旦还有 " +
        days +
        " 天 " +
        hours +
        " 小时 " +
        minutes +
        " 分钟 " +
        seconds +
        " 秒";
    </script>
  </body>
</html>

示例2:带有动态效果的数字倒计时

这个示例中,我们对基础版的倒计时进行了增强,加上了动态效果。即数字不是瞬间跳变的,而是平滑缓慢地过渡到下一个数字,让页面显得更加流畅生动。

<!DOCTYPE html>
<html>
  <head>
    <title>JavaScript实现带有动态效果的数字倒计时</title>
    <style>
      .countdown {
        font-size: 40px;
        text-align: center;
        font-family: Arial, Helvetica, sans-serif;
        margin-top: 50px;
      }
      .number {
        width: 80px;
        height: 80px;
        background-color: yellow;
        display: inline-block;
        margin: 0 10px;
        text-align: center;
        line-height: 80px;
        position: relative;
      }
      .number:before {
        content: "";
        display: block;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: orange;
        z-index: -1;
        opacity: 0;
        transition: all 0.3s ease-in-out;
      }
      .number.active:before {
        opacity: 1;
      }
    </style>
  </head>
  <body>
    <div class="countdown">
      <span class="number" id="days"></span>
      <span class="number" id="hours"></span>
      <span class="number" id="minutes"></span>
      <span class="number" id="seconds"></span>
    </div>

    <script>
      var countdownElement = document.querySelector(".countdown");
      var daysElement = document.getElementById("days");
      var hoursElement = document.getElementById("hours");
      var minutesElement = document.getElementById("minutes");
      var secondsElement = document.getElementById("seconds");

      function updateCountdown() {
        var endTime = new Date("2021-12-31 23:59:59");
        var remainingTime = endTime.getTime() - new Date().getTime();

        var days = Math.floor(remainingTime / (1000 * 60 * 60 * 24));
        var hours = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        var minutes = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60));
        var seconds = Math.floor((remainingTime % (1000 * 60)) / 1000);

        // 用一个对象来存储每个数字对应的元素
        var elements = {
          days: daysElement,
          hours: hoursElement,
          minutes: minutesElement,
          seconds: secondsElement,
        };

        // 遍历所有数字元素,为每个元素添加active类名
        Object.keys(elements).forEach(function (key) {
          var element = elements[key];
          var value = eval(key);

          element.classList.remove("active");
          setTimeout(function () {
            element.innerHTML = value < 10 ? "0" + value : value;
            element.classList.add("active");
          }, 0);
        });

        // 每秒更新倒计时
        setTimeout(updateCountdown, 1000);
      }

      updateCountdown();
    </script>
  </body>
</html>

希望这篇文章对你有帮助!如果你还有其他问题,请继续问我。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现简单的数字倒计时 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • javascript类型系统——日期Date对象全面了解

    JavaScript类型系统——日期Date对象全面了解 什么是Date对象 Date对象是JavaScript日期数据类型的对象表示法,它能够精确地表示精确到毫秒的日期和时间。 如何创建Date对象 Date对象的创建有以下几种方式: 1. 直接创建 可以通过new关键字直接创建Date对象。 const now = new Date(); console…

    JavaScript 2023年5月27日
    00
  • JS实现导出Excel的五种方法详解【附源码下载】

    这里我来详细讲解一下“JS实现导出Excel的五种方法详解【附源码下载】”这篇文章。 一、背景介绍 文章首先对导出Excel的重要性进行了介绍,并指出了常见的几种导出Excel的场景,如表格报表、数据分析等。 二、五种导出Excel的方法 接着,文章依次介绍了五种导出Excel的方法,并附上了详细的源码和演示效果。 1.使用table2excel插件导出Ex…

    JavaScript 2023年6月11日
    00
  • js与jquery正则验证电子邮箱、手机号、邮政编码的方法

    作为网站的作者,为了保证用户提交的数据有效和安全,我们需要对输入的电子邮箱、手机号和邮政编码进行正则验证。JavaScript和jQuery都可以进行正则验证,下面是针对这三种常见输入的完整攻略: 1. 电子邮箱验证 正则表达式 电子邮箱的验证需要用到正则表达式,下面是一个常用的正则表达式: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-]…

    JavaScript 2023年6月1日
    00
  • js常用函数2008-8-16整理第1/2页

    题目提到的“js常用函数2008-8-16整理第1/2页”应该是某个网站或者博客上的一个文章或者介绍。在这里我会假设这个文章是一个Markdown文档。 详细讲解“js常用函数2008-8-16整理第1/2页”的完整攻略 1. 阅读文档 首先,我们需要仔细阅读这篇文章,确定其主要内容和结构。我们需要了解这篇文章介绍了哪些JavaScript常用函数,这些函数…

    JavaScript 2023年5月18日
    00
  • JS浏览器BOM常见操作实例详解

    JS浏览器BOM常见操作实例详解 JS浏览器BOM(Browser Object Model)是指浏览器对象模型,它提供了与浏览器窗口进行交互的API。BOM包含了window、navigator、document等对象,这些对象是直接映射到浏览器窗口的,可以通过JS编程来操作浏览器窗口。本文将详细讲解JS浏览器BOM常见操作实例,包括获取浏览器窗口尺寸、打…

    JavaScript 2023年6月10日
    00
  • 使用Angular缓存父页面数据的方法

    使用Angular缓存父页面数据是提高应用性能的一种有效方式。下面将介绍如何使用Angular提供的服务和技术来实现此目的。 缓存父页面数据的方法 使用Angular 的服务 使用@Input 和@Output 装饰器 在组件之间可以使用@Input 和@Output 装饰器来传递数据,父组件可以通过将数据绑定到@Input 装饰器上来将数据传递给子组件。这…

    JavaScript 2023年6月11日
    00
  • Jsonp post 跨域方案

    下面我将详细讲解 Jsonp post 跨域方案的完整攻略。 什么是 Jsonp post 跨域方案? 在前端开发中,常常会遇到需要跨越多个域名进行数据交互的问题,而出于安全考虑,浏览器出于安全策略的限制,不允许通过 ajax 请求访问跨域资源,这时可以采用 Jsonp post 跨域方案来实现数据交互。 Jsonp 是一种通过动态创建 script 标签跨…

    JavaScript 2023年5月27日
    00
  • JavaScript三大变量声明详析

    JavaScript三大变量声明详析 在JavaScript中,我们经常需要声明变量来存储和操作数据。常见的变量声明有三种:var、let和const。本文将详细讲解这三种变量声明的特点和使用方法。 var var是ES5标准引入的变量声明关键字。使用var声明的变量拥有函数作用域(function scope),即在函数中声明的变量只在该函数内部有效。如果…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部