如何用 JavaScript 动态创建一个活动倒计时功能
最编程
2024-02-23 15:38:04
...
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
活动倒计时,其实挺常见的,不说远的,最近就有不少双十一活动,下面就以实现一个活动倒计时的小需求来展开讲讲。
下面是需求细节点
-
活动开始时间:2021-11-01 00:00:00
-
活动结束时间:2021-11-19 23:59:59
-
倒计时文案
- 活动前:距活动开始 x天x时x分x秒
- 活动中: 距活动结束 x天x时x分x秒
- 活动结束:活动已结束!更多优惠请在线咨询
原理
既然是倒计时,肯定是要涉及到时间日期的操作了。js 里可以用 new Date()
来创建各种格式的时间日期。还涉及到定时器的使用。有活动开始时间和结束时间,计算出当前时间距离活动开始和活动结束的时间差,还要对剩余时间做下处理,得出天、时、分、秒,然后通过重复调用,每隔 1 秒刷新一次就实现了。
实战
来写个代码吧,下面是完整代码,有对应的注释说明
有个小细节需要注意,如果是 10 以下的数我们要进行补零!我们写一个补零函数,名字为addZero
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS 实现一个活动倒计时</title>
</head>
<body>
<h1 id="activityText"></h1>
<script>
countDown();
function countDown() {
function addZero(i) {
return i < 10 ? "0" + i : i;
}
let activityText = document.querySelector('#activityText');
let timer = null;
const startTime = new Date('2021-11-01 00:00:00');
const endTime = new Date('2021-11-19 23:59:59');
// 注:这里是直接使用用户本地系统时间做演示
const nowTime = new Date();
// 当前时间距离活动开始时间的差值
const beginDiff = parseInt((startTime.getTime() - nowTime.getTime()) / 1000);
//当前时间距离活动结束时间的差值
const endDiff = parseInt((endTime.getTime() - nowTime.getTime()) / 1000);
// 剩余时间
const leftTime = beginDiff > 0 ? beginDiff : endDiff;
let day = parseInt(leftTime / (24 * 60 * 60))
let hour = parseInt(leftTime / (60 * 60) % 24);
let minute = parseInt(leftTime / 60 % 60);
let second = parseInt(leftTime % 60);
day = addZero(day);
hour = addZero(hour);
minute = addZero(minute);
second = addZero(second);
if (beginDiff > 0) {
activityText.innerText = `距活动开始 ${day}天 ${hour}时 ${minute}分 ${second}秒`;
timer = setTimeout(countDown, 1000);
} else if (leftTime <= 0) {
activityText.innerText = '活动已结束!更多优惠请在线咨询';
clearTimeout(timer);
} else {
activityText.innerText = `距活动结束 ${day}天 ${hour}时 ${minute}分 ${second}秒`;
timer = setTimeout(countDown, 1000);
}
}
</script>
</body>
</html>
写到最后
最终效果是下面的图片这样的。
其实活动倒计时,使用 setTimout 或者 setInterval 来对一个函数进行递归或者重复调用,然后对 DOM 节点做对应的 render 处理,并对时间做倒计时的格式化处理。
上面那种写法,是面向过程,无法扩展的,但是可以实现具体效果,还可以更加深入了解一些细节,比如使用面向对象编程的思路,来实现倒计时。
完。
推荐阅读
-
Java 类加载器的作用 - 简介:类加载器是 Java™ 中一个非常重要的概念。类加载器负责将 Java 类的字节码加载到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模型、加载类的具体过程和线程上下文类加载器等。然后介绍了如何开发自己的类加载器,最后介绍了类加载器在 Web 容器和 OSGi™ 中的应用。 类加载器是 Java 语言的一项创新,也是 Java 语言广受欢迎的重要原因之一。它允许将 Java 类动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 开始出现,最初是为了满足 Java Applets 的需求而开发的,Java Applets 需要从远程位置下载 Java 类文件并在浏览器中执行。现在,类加载器已广泛应用于网络容器和 OSGi。一般来说,Java 应用程序的开发人员不需要直接与类加载器交互;Java 虚拟机的默认行为足以应对大多数情况。但是,如果遇到需要与类加载器交互的情况,而您又不太了解类加载器的机制,就很容易花费大量时间调试异常,如 ClassNotFoundException 和 NoClassDefFoundError。本文将详细介绍 Java 的类加载器,帮助读者深入理解 Java 语言中的这一重要概念。下面先介绍一些基本概念。 类加载器的基本概念 顾名思义,类加载器用于将 Java 类加载到 Java 虚拟机中。一般来说,Java 虚拟机以如下方式使用 Java 类:Java 源程序(.java 文件)经 Java 编译器编译后转换为 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码并将其转换为 java.lang 实例。每个实例都用来表示一个 Java 类。通过该实例的 newInstance 方法创建该类的对象。实际情况可能更加复杂,例如,Java 字节代码可能是由工具动态生成或通过网络下载的。 基本上,所有类加载器都是 java.lang.ClassLoader 类的实例。下面将详细介绍这个 Java 类。 java.lang.ClassLoader 类简介 java.lang.ClassLoader 类的基本职责是根据给定类的名称为其查找或生成相应的字节码,然后根据这些字节码定义一个 Java 类,即 java.lang.Class 类的实例。除此之外,ClassLoader 还负责加载 Java 应用程序所需的资源,如图像文件和配置文件。不过,本文只讨论它加载类的功能。为了履行加载类的职责,ClassLoader 提供了许多方法,其中比较重要的方法如表 1 所示。下文将详细介绍这些方法。 表 1.与加载类相关的 ClassLoader 方法
-
如何用JavaScript轻松创建倒计时功能
-
如何用 JavaScript 动态创建一个活动倒计时功能