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 的动画来展示剩余时间。

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

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

相关文章

  • JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)实例详解

    JS赋值、浅拷贝和深拷贝 在JavaScript开发中,我们经常需要对变量进行赋值操作,同时还需要将对象或数组复制到另一个变量中。这些操作看起来很简单,但如果不理解JavaScript中变量存储的方式,就容易引出一些微妙的问题。本文将简单介绍JS赋值、浅拷贝和深拷贝。 JS赋值 JS赋值操作可以将一个变量的值赋给另一个变量。这是一种基本的操作,也是很容易看懂…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript 事件流

    请听我详细讲解“详解JavaScript 事件流”的完整攻略。 什么是JavaScript事件流 JavaScript事件流指的是介绍HTML中事件触发的顺序。HTML通常是从外部开始的,并从外部向下(冒泡阶段)移动到最下方元素,然后在内部从下到上执行(捕获阶段)。事件以冒泡的形式进行,这意味着在激活事件后,事件将从内部向外冒泡。例如,如果你点击一个按钮,事…

    JavaScript 2023年6月10日
    00
  • JavaScript中数组flat方法的使用与实现方法

    下面是关于“JavaScript中数组flat方法的使用与实现方法”的详细攻略。 一、什么是数组flat方法 1.1 官方定义 Array.prototype.flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与子数组中的元素合并为一个新数组返回。 1.2 使用场景 在处理多层嵌套的数组时,我们经常需要将数组压平成一维数组,可以使用flat方…

    JavaScript 2023年5月27日
    00
  • JS开发自己的类库实例分析

    JS开发自己的类库需要经过以下步骤: 步骤一:确定类库的功能 在开发类库之前,需要确定我们想要实现的功能。这些功能需要与当前市场上主流的类库有一定的区别,也可以是现有类库中不足之处的补充。例如,可以考虑开发一个支持异步请求的类库,或者是在表单验证方面做出针对性的改进。 步骤二:编写代码 确定了功能之后,就可以开始编写代码了。在编写代码的过程中,需要注意以下几…

    JavaScript 2023年5月28日
    00
  • 原生js实现页面滚动动画

    为了实现“原生js实现页面滚动动画”,我们需要以下步骤: 1. 监听页面滚动事件 在监听“页面滚动事件”之前,需要先获得“滚动高度”和“窗口可视高度”两个常量,以便后续的计算。这里的计算方法如下: const scrollTop = window.pageYOffset || document.documentElement.scrollTop; // 获取…

    JavaScript 2023年6月11日
    00
  • vue element el-form 多级嵌套验证的实现示例

    针对“vue element el-form 多级嵌套验证的实现示例”的完整攻略,我给您提供以下步骤: 步骤一:配置element-ui 首先需要在项目中引入Element-UI组件库,并按照文档要求进行全局和局部组件的注册,具体步骤可以参考官方文档:https://element.eleme.cn/#/zh-CN/component/installatio…

    JavaScript 2023年6月10日
    00
  • 详解js中class的多种函数封装方法

    下面是“详解js中class的多种函数封装方法”的完整攻略。 什么是类(class)? 类是JavaScript中的一种面向对象的编程范式,是ES6中增加的新特性,能够更好地封装数据和行为。它是复杂对象的一种抽象描述,用于描述具有相同特征(属性)和行为的对象的集合。 类的多种函数封装方法 1. 构造函数封装 通过构造函数实现类的定义和方法的调用。构造函数不需…

    JavaScript 2023年5月27日
    00
  • 浅谈jQuery异步对象(XMLHttpRequest)

    浅谈jQuery异步对象(XMLHttpRequest) 异步对象简介 XMLHttpRequest对象是JavaScript中进行HTTP通信的核心技术之一。它使得web应用程序可以通过JavaScript进行异步HTTP通信,从而在页面不刷新的情况下实现动态更新。jQuery在此基础上封装了自己的异步对象,使得开发者可以更加便捷地使用它来进行AJAX操作…

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