js实现简单的倒计时

下面是关于“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 的动画来展示剩余时间。

阅读剩余 76%

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

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

相关文章

  • JS中let的基本用法举例

    JS中let是一种声明变量的关键字,而且它是在ES6(ECMAScript 2015)中引入的。相对于var关键字,let具有更为严格的作用域和更加灵活的用法。以下是let的几个基本用法: 1. 块级作用域 let关键字通过块级作用域,可以让我们更灵活地控制变量的作用域范围。块级作用域,指的是在代码块内声明的变量,在代码块外是不可见的。例如: functio…

    JavaScript 2023年5月28日
    00
  • 浅析JavaScript中的特殊函数及用法小结

    浅析JavaScript中的特殊函数及用法小结 题意概述 该题要求讲解 JavaScript 中的特殊函数及用法,并提供至少两个具体的示例。 异步函数 在 JavaScript 中,异步函数是经常被使用的特殊函数。当使用异步函数时,代码将会先继续执行后续语句,等待异步函数执行完后再执行对应的回调函数。异步函数在实际应用中尤为重要,例如从服务器获取数据、读取文…

    JavaScript 2023年5月18日
    00
  • vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀

    在讲解“vue 项目打包通过命令修改 vue-router 模式修改 API 接口前缀”之前,我们需要了解一下几个基本概念。 vue-router:是 Vue.js 官方提供的路由管理插件。 API 接口前缀:是指 API 接口的 URL 前面的部分,通常包含域名、端口号等信息。 下面是详细的攻略: 修改 vue-router 模式: Vue Router …

    JavaScript 2023年6月11日
    00
  • 自己写一个uniapp全局弹窗(APP端)

    下面是详细讲解如何自己写一个uniapp全局弹窗(APP端)的完整攻略。 1. 准备工作 在开始之前,需要先确定以下几点: 确定弹窗的样式和内容,包括弹窗的尺寸、背景色、字体等; 确定弹窗的触发方式,比如是否需要点击按钮或者触发特定事件; 确定弹窗的位置,比如是否需要固定在屏幕底部或者居中展现。 2. 实现步骤 实现全局弹窗的基本步骤如下: 在 App.vu…

    JavaScript 2023年6月11日
    00
  • javascript中怎么做对象的类型判断

    在JavaScript中,我们可以使用typeof、instanceof、Object.prototype.toString()三种方式来判断一个对象的类型。 使用typeof typeof操作符可以用来判断一个对象的类型,但是它并不完全准确。例如,typeof null返回的是object,但是我们知道null并不是对象类型。 typeof null //…

    JavaScript 2023年5月27日
    00
  • Javascript & DHTML DOM基础和基本API第5/5页

    《Javascript & DHTML DOM基础和基本API》是一本介绍JavaScript和DHTML的书籍,其中包含了JavaScript和DHTML DOM的基础和API,本攻略将对第5/5页进行详细解读。 1. 什么是DOM? DOM(Document Object Model)是HTML和XML文档的编程接口,它将整个页面抽象成一个树状结…

    JavaScript 2023年6月10日
    00
  • js 数组 find,some,filter,reduce区别详解

    当我们在开发 JavaScript 程序时,经常会用到数组的各种方法,其中包括 find、some、filter 和 reduce 等方法。这些方法可以帮助我们在数组中找到特定的元素、过滤不需要的元素、对数组进行操作并返回新的数组等。 下面就一个一个地详细讲解这些方法的用法和区别: find 方法 find 方法返回满足条件的第一个元素,如果找不到,返回 u…

    JavaScript 2023年5月27日
    00
  • 用python找出那些被“标记”的照片

    下面是用Python找出被“标记”的照片的完整攻略。 步骤1:安装依赖库 在使用Python进行图像处理时,需要安装一些依赖库,如OpenCV、Pillow、numpy等。可以使用pip等方式进行安装。 !pip install opencv-python !pip install opencv-contrib-python !pip install Pil…

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