
在网页开发中,倒计时功能常用于“即将上线”页面、活动预告或限时优惠等场景。一个典型的倒计时会显示距离某个未来日期还剩多少天、小时、分钟和秒。然而,如果倒计时逻辑被硬编码或封装在立即执行函数表达式(iife)中,其目标日期一旦设定就难以在运行时进行修改或重置。
原始代码中存在两个主要问题:
为了解决这些问题,我们需要构建一个更加灵活的JavaScript函数,它允许我们随时指定新的目标日期并重新启动倒计时。
实现可重置倒计时的关键在于使用 setInterval 和 clearInterval 这两个JavaScript函数。setInterval 用于周期性地执行某个函数(例如每秒更新一次倒计时),而 clearInterval 则用于停止由 setInterval 创建的定时器。通过在重置时先清除旧的定时器,再创建一个新的定时器,我们就能实现倒计时的动态更新。
以下是优化后的JavaScript代码,它定义了一个可重置的倒计时函数:
let tId; // 用于存储 setInterval 的ID,以便后续清除
/**
* 设置并启动倒计时
* @param {number} target_date - 目标日期的毫秒时间戳
*/
function setCountDown(target_date) {
// 确保在启动新倒计时前,清除任何旧的定时器
if (tId) {
clearInterval(tId);
}
// 定义时间单位变量
let days, hours, minutes, seconds;
// 每1秒更新一次倒计时显示
tId = setInterval(function() {
const current_date = new Date().getTime(); // 获取当前时间戳
let seconds_left = (target_date - current_date) / 1000; // 计算剩余秒数
if (current_date < target_date) {
// 如果目标日期未到,则进行时间计算
days = Math.floor(seconds_left / 86400);
seconds_left %= 86400;
hours = Math.floor(seconds_left / 3600);
seconds_left %= 3600;
minutes = Math.floor(seconds_left / 60);
seconds = Math.floor(seconds_left % 60);
// 格式化数字,确保两位显示(例如 09 而不是 9)
days = days < 10 ? "0" + days : days;
hours = hours < 10 ? "0" + hours : hours;
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
} else {
// 目标日期已过,全部显示为00
days = '00';
hours = '00';
minutes = '00';
seconds = '00';
clearInterval(tId); // 倒计时结束,清除定时器
}
// 更新DOM元素显示
$(".days .number").html(days);
$(".hours .number").html(hours);
$(".minutes .number").html(minutes);
$(".seconds .number").html(seconds);
}, 1000); // 每1000毫秒(1秒)执行一次
}
/**
* 初始化倒计时
*/
const initTime = () => {
// 初始设置一个目标日期,例如 2023年6月10日 10:00:00
const initial_target_date = new Date("2023-06-10T10:00:00").getTime();
setCountDown(initial_target_date);
};
// 当DOM加载完成后执行初始化
$(function() {
initTime();
});为了配合JavaScript代码,HTML结构需要提供相应的占位符,以便JavaScript能够更新倒计时数字。原始代码中的 data-date-target 属性不再需要,因为目标日期现在由JavaScript动态管理。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<main class="main-content">
<div class="container shrinked">
<h1 class="section-title center-aligned">我们正在准备一些新内容。<br> <span>敬请期待!</span></h1>
<div class="counter-wrap">
<div class="counter days">
<div class="number">0</div>
<div class="caption">天</div>
</div>
<!-- .counter -->
<div class="counter hours">
<div class="number">0</div>
<div class="caption">小时</div>
</div>
<!-- .counter -->
<div class="counter minutes">
<div class="number">0</div>
<div class="caption">分钟</div>
</div>
<!-- .counter -->
<div class="counter seconds">
<div class="number">0</div>
<div class="caption">秒</div>
</div>
<!-- .counter -->
</div>
<!-- .counter-wrap -->
</div>
<!-- .container -->
</main>
<!-- .main-content -->注意: 确保在您的HTML中引入了jQuery库,因为上述JavaScript代码依赖于jQuery的选择器和功能。
要重置倒计时,您只需要调用 setCountDown 函数,并传入一个新的目标日期时间戳即可。
例如,如果您想将倒计时重置为从当前时间开始的7天后:
// 假设当前时间是 2023-06-03 10:00:00
// 重置为 7 天后,即 2023-06-10 10:00:00
const newTargetDate = new Date("2023-06-10T10:00:00").getTime(); // 替换为您希望的新日期
setCountDown(newTargetDate);或者,如果您想重置为从现在开始的7天后,可以这样计算:
const now = new Date(); const sevenDaysLater = new Date(now.getTime() + (7 * 24 * 60 * 60 * 1000)); // 当前时间加上7天的毫秒数 setCountDown(sevenDaysLater.getTime());
这行代码会:
通过将倒计时逻辑封装在可控的函数中,并利用 setInterval 和 clearInterval 机制,我们可以轻松地实现一个灵活且可重置的网页倒计时功能。这种方法不仅解决了静态倒计时难以更新的问题,也为开发者提供了更强的控制力,以适应各种动态的业务需求。在实际应用中,结合对日期格式、时区和用户体验的考量,可以构建出健壮且用户友好的倒计时组件。
以上就是动态网页倒计时器重置与优化指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号