js实现简单的倒计时

yizhihongxing

下面是关于“JS实现简单的倒计时”的详细攻略。

基本思路

倒计时的原理很简单,就是获取未来的某个时间点与当前时间点的差值,然后根据差值计算出剩余的时间,最后通过 DOM 操作将剩余的时间显示在网页上。

实现步骤

1. 获取未来时间点

倒计时的第一步就是要获取未来的某个时间点,可以在 HTML 中用一个 input 标签来输入一个日期时间字符串,然后使用 new Date() 方法将其转成 JavaScript 的 Date 对象,如下所示:

<input type="datetime-local" id="deadline" />
const deadlineInput = document.getElementById('deadline');
const deadline = new Date(deadlineInput.value);

另外,还可以使用 Date.parse() 方法将日期字符串转换为时间戳,不过需要注意的是,这种方法只能识别一些固定格式的日期字符串。

2. 获取当前时间点

倒计时的第二步就是要获取当前的时间点,同样可以使用 new Date() 方法来获取,如下所示:

const now = new Date();

3. 计算时间差值

倒计时的第三步就是要计算未来时间与当前时间的差值,最简单的做法就是用未来时间戳减去当前时间戳,可以使用 getTime() 方法获取时间戳,如下所示:

const diff = deadline.getTime() - now.getTime();

4. 转换时间格式

倒计时的第四步就是要将时间差值转换成具体的剩余时间,这里可以使用一些数学运算和字符串模板的方法来实现,如下所示:

// 计算剩余时间的小时、分钟和秒数
const hours = Math.floor(diff / (60 * 60 * 1000));
const minutes = Math.floor(diff / (60 * 1000) % 60);
const seconds = Math.floor(diff / 1000 % 60);

// 拼接剩余时间的字符串模板
const remainingTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;

其中,Math.floor() 方法用于向下取整,toString() 方法用于将数字转成字符串,padStart() 方法用于将字符串的长度填充到指定的长度。

5. 显示剩余时间

倒计时的最后一步就是要将剩余时间显示在网页上,可以直接通过 DOM 操作将剩余时间的字符串模板赋值给某个元素的 textContent 属性,如下所示:

const remainingTimeElem = document.getElementById('remaining-time');
remainingTimeElem.textContent = remainingTime;

示例说明

下面给出两个示例,分别演示了如何使用 HTML、CSS 和 JavaScript 实现一个基本的倒计时效果。

示例一:基本倒计时

HTML 代码:

<div class="counter">
  <span id="remaining-time">00:00:00</span>
</div>
<form id="deadline-form">
  <label for="deadline">截止时间:</label>
  <input type="datetime-local" id="deadline" />
  <button type="submit">开始倒计时</button>
</form>

CSS 代码:

.counter {
  font-size: 2rem;
  font-weight: bold;
  text-align: center;
  margin-top: 2rem;
}

JavaScript 代码:

const deadlineForm = document.getElementById('deadline-form');
const remainingTimeElem = document.getElementById('remaining-time');

deadlineForm.addEventListener('submit', function (event) {
  event.preventDefault();

  const deadlineInput = document.getElementById('deadline');
  const deadline = new Date(deadlineInput.value);
  const now = new Date();
  const diff = deadline.getTime() - now.getTime();

  setInterval(function () {
    const hours = Math.floor(diff / (60 * 60 * 1000));
    const minutes = Math.floor(diff / (60 * 1000) % 60);
    const seconds = Math.floor(diff / 1000 % 60);
    const remainingTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;

    remainingTimeElem.textContent = remainingTime;

    if (--diff <= 0) {
      clearInterval(this);
      alert('时间到!');
    }
  }, 1000);
});

该示例展示了一个简单的倒计时效果,可以在表单中输入一个日期时间,然后按下“开始倒计时”按钮,程序就会开始倒计时,最后当剩余时间为 0 时会弹出一个提示框来提醒用户。

示例二:钟表倒计时

HTML 代码:

<div class="clock">
  <div class="clock-hand clock-hour"></div>
  <div class="clock-hand clock-minute"></div>
  <div class="clock-hand clock-second"></div>
</div>
<form id="deadline-form">
  <label for="deadline">截止时间:</label>
  <input type="datetime-local" id="deadline" />
  <button type="submit">开始计时</button>
</form>

CSS 代码:

.clock {
  position: relative;
  width: 200px;
  height: 200px;
  margin: 2rem auto;
  border-radius: 50%;
  border: 2px solid #333;
}

.clock-hand {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 2px;
  height: 50%;
  transform-origin: bottom center;
  background-color: #333;
  transition: transform 0.5s ease-in-out;
}

.clock-hour {
  height: 40%;
}

.clock-minute {
  height: 60%;
}

.clock-second {
  height: 80%;
}

JavaScript 代码:

const deadlineForm = document.getElementById('deadline-form');
const clockHour = document.querySelector('.clock-hour');
const clockMinute = document.querySelector('.clock-minute');
const clockSecond = document.querySelector('.clock-second');

deadlineForm.addEventListener('submit', function (event) {
  event.preventDefault();

  const deadlineInput = document.getElementById('deadline');
  const deadline = new Date(deadlineInput.value);
  const diff = deadline.getTime() - new Date().getTime();

  setInterval(function () {
    const totalSeconds = Math.floor(diff / 1000);
    const remainingSeconds = totalSeconds % 60;
    const remainingMinutes = Math.floor(totalSeconds / 60) % 60;
    const remainingHours = Math.floor(totalSeconds / 3600) % 12;
    const hourAngle = remainingHours * 30 + remainingMinutes * 0.5;
    const minuteAngle = remainingMinutes * 6;
    const secondAngle = remainingSeconds * 6;

    clockHour.style.transform = `rotate(${hourAngle}deg)`;
    clockMinute.style.transform = `rotate(${minuteAngle}deg)`;
    clockSecond.style.transform = `rotate(${secondAngle}deg)`;
  }, 1000);
});

该示例展示了一个基于时钟的倒计时效果,可以在表单中输入一个日期时间,然后按下“开始计时”按钮,程序就会开始进行倒计时,最后通过 CSS 的动画来展示剩余时间。

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

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

相关文章

  • JavaScript的DOM事件详解

    下面是JavaScript的DOM事件详解的完整攻略。 什么是DOM事件? DOM事件是指由DOM元素触发的事件,包括如下几种类型: 鼠标事件:click、mousedown、mousemove、mouseup、mouseover、mouseout、mouseenter、mouseleave等。 键盘事件:keydown、keypress、keyup等。 表…

    JavaScript 2023年6月10日
    00
  • javascript最基本的函数汇总

    本文将分享JavaScript最基本的函数汇总,包含函数的定义、调用和返回值等内容。 函数的定义 JavaScript中定义函数非常简单,使用function关键字,并指定函数名、参数列表和函数体。 示例代码: function sayHello(name) { console.log("Hello, " + name); } 上述代码定…

    JavaScript 2023年5月18日
    00
  • JavaScript、C# URL编码、解码总结

    JavaScript、C# URL编码、解码总结 在进行URL传输时,为了防止特殊字符导致的错误,需要对URL进行编码。JavaScript和C#都提供了URL编码、解码的方法。 JavaScript URL编码、解码 在JavaScript中,可以使用encodeURI、encodeURIComponent对URL进行编码,使用decodeURI、deco…

    JavaScript 2023年5月20日
    00
  • 在nuxt中使用路由重定向的实例

    下面我将为你讲解在Nuxt中使用路由重定向的实例攻略。 什么是路由重定向? 路由重定向是浏览器在访问某个页面时,将页面地址自动跳转到另一个地址的技术,也叫URL重定向。 在Nuxt中,路由重定向可以通过使用 Nuxt.js 提供的插件实现,其中就包括 @nuxtjs/redirect-module 插件。 安装@nuxtjs/redirect-module插…

    JavaScript 2023年6月11日
    00
  • JavaScript中的new操作符的具体使用

    当我们需要创建一个新的对象时,我们可以使用JavaScript中的new操作符。它不仅创建了一个新的对象,而且它还让我们能够调用对象的构造函数来为对象进行初始化。本文将详细讲解如何使用new操作符。 使用new操作符创建一个新对象 在JavaScript中,我们可以使用new关键字来创建一个新的对象。在这样做之前,我们必须先定义一个构造函数。下面是一个简单的…

    JavaScript 2023年5月28日
    00
  • javascript实现设置、获取和删除Cookie的方法

    下面是关于“JavaScript实现设置、获取和删除Cookie的方法”的完整攻略。 设置Cookie Cookie是HTTP协议提供的一种状态管理机制。可以通过JS设置Cookie来在浏览器端存储一些信息。在JavaScript中,设置Cookie主要包括三个步骤: 将需要存储的数据转换为字符串格式。 将存储字符串写入Cookie。 设置Cookie的过期…

    JavaScript 2023年6月11日
    00
  • js获取浏览器基本信息大全

    获取浏览器基本信息是前端开发中比较常用的一个需求。通过 JavaScript 可以获取浏览器的类型、版本号、操作系统类型等信息。下面就来详细讲解一下如何获取浏览器基本信息。 获取浏览器类型和版本号 可以使用 navigator.userAgent 获取当前浏览器的 UserAgent 字符串,然后通过正则表达式匹配出浏览器类型和版本号。 // 获取浏览器类型…

    JavaScript 2023年6月11日
    00
  • JavaScript+CSS实现唯美蝴蝶动画

    下面我就来详细讲解一下“JavaScript+CSS实现唯美蝴蝶动画”的完整攻略。 1. 准备蝴蝶图片素材 第一步需要准备的就是蝴蝶图片素材。这里我们需要两张素材,一张是蝴蝶展翅的图片,另一张是蝴蝶合拢翅的图片。可以在网络上搜索或者自己拍摄。 2. HTML文件结构 创建一个 HTML 文件,并添加如下结构: <!DOCTYPE html> &l…

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