demo3用setInterval()方法做一个节日倒计时

本文介绍如何利用JavaScript的setInterval()方法制作一个节日倒计时器,包括计算倒计时天数、小时、分钟和秒数,以及将时间显示为图片样式的方法。重点在于日期的正确表示和倒计时逻辑的实现。

    周末研究了一下setInterval()方法,打算做一个倒计时器,今天早上感觉到位了,将定时器做出来了…

做这个倒计时一共需要解决三个问题:
1、倒计时距离2019-10-1国庆小长假还有多少天 多少小时 多少分 多少秒?
  (tip:两个日期可以相减结果是毫秒)
2、时间倒计时如何实现?
3、如何将时间换成图片样式?(这一步可做可不做,如果想让页面变得好看一点就可以做,图片可以在网上找)

下面开始解决第一个问题:
    倒计时距离2019-10-1国庆小长假还有多少天 多少小时 多少分 多少秒?
    其中:var date2 = new Date(“2019-10-1”);
    这里日期写10-1和10-01,是有很大区别的,大家可以去浏览器跑程序试一下,设置时间写2019-10-1,获取的时间为2019-10-1 00:00:00 ;若写2019-10-01,获取的时间为2019-10-01 08:00:00;按照习惯,建议大家写2019-10-1;

var date1 = new Date();
var date2 = new Date("2019-10-1");
var count = parseInt((date2 - date1)/1000);//两个时间可以相减,减出来的时间为毫秒,将毫秒转化为秒
var newday = parseInt(count / 60 / 60 / 24); //计算天数
var newhour = parseInt(count / 60 / 60 % 24);
var newmin = parseInt(count / 60 / 60 % 24);
var newsec = parseInt(count % 60);

接下来第二点:
    时间倒计时如何实现?
    这一步我想了一晚上想破脑袋都没写

<think>我们被要求实现一个JavaScript倒计时功能,传入分钟参数,然后开始倒计时。 思路: 1. 创建一个函数,接受分钟数作为参数。 2. 计算结束时间:当前时间加上分钟数换成的毫秒数。 3. 使用setInterval每秒更新一次倒计时显示。 4. 在倒计时结束时清除interval并执行回调(如果需要)。 我们将创建一个函数startCountdown(minutes, callback),其中: - minutes: 倒计时的分钟数 - callback: 倒计时结束时的回调函数(可选) 倒计时显示格式:分钟:秒(MM:SS) 注意:我们将在页面上显示倒计时,所以需要一个容器元素。这里我们假设有一个id为"countdown"的元素。 步骤: 1. 计算结束时间:当前时间 + minutes * 60 * 1000。 2. 立即更新一次倒计时(避免等待1秒才显示初始时间)。 3. 设置一个定时器,每秒更新一次。 4. 更新函数:计算剩余时间,格式化为MM:SS,并更新到页面元素。 5. 当剩余时间小于等于0时,清除定时器,显示00:00,并执行回调函数。 格式化函数:将毫秒数换为分钟和秒,并确保两位数显示。 注意:如果传入的分钟数为0或负数,则直接结束。 代码实现:</think>下面我将详细解释如何使用 JavaScript 实现传入分钟参数的倒计时功能: ### 实现思路 1. **接收分钟参数**:将分钟换为毫秒(1分钟 = 60,000毫秒) 2. **计算结束时间**:当前时间 + 分钟参数对应的毫秒数 3. **定时更新**:每秒计算剩余时间并更新显示 4. **格式化输出**:将毫秒换为分:秒格式(MM:SS) 5. **结束处理**:倒计时结束时触发回调 ### 完整代码实现 ```javascript /** * 启动倒计时 * @param {number} minutes - 倒计时的分钟数 * @param {function} [callback] - 倒计时结束时的回调函数 */ function startCountdown(minutes, callback) { // 1. 将分钟换为毫秒并计算结束时间 const endTime = Date.now() + minutes * 60 * 1000; // 2. 立即显示初始时间 updateDisplay(minutes * 60); // 3. 每秒更新一次显示 const timer = setInterval(() => { const secondsLeft = Math.round((endTime - Date.now()) / 1000); if (secondsLeft <= 0) { clearInterval(timer); updateDisplay(0); if (callback) callback(); // 触发结束回调 } else { updateDisplay(secondsLeft); } }, 1000); } /** * 更新页面显示 * @param {number} totalSeconds - 剩余总秒数 */ function updateDisplay(totalSeconds) { // 计算分钟和秒数 const minutes = Math.floor(totalSeconds / 60); const seconds = totalSeconds % 60; // 格式化为两位数 (MM:SS) const display = `${minutes.toString().padStart(2, &#39;0&#39;)}:${seconds.toString().padStart(2, &#39;0&#39;)}`; // 更新页面元素 document.getElementById(&#39;countdown&#39;).textContent = display; } // 使用示例 startCountdown(28, () => { console.log(&#39;倒计时结束!&#39;); // 这里可以添加结束后的操作,如: // document.getElementById(&#39;countdown&#39;).textContent = &#39;时间到!&#39;; }); ``` ### HTML 示例 ```html <div> 剩余时间: <span id="countdown">28:00</span> </div> ``` ### 关键点说明 1. **时间换**: - `minutes * 60 * 1000` 将分钟换为毫秒 - `Math.floor(totalSeconds / 60)` 获取分钟数 - `totalSeconds % 60` 获取剩余秒数 2. **格式化显示**: - `padStart(2, &#39;0&#39;)` 确保始终显示两位数(如 `5` → `05`) 3. **性能优化**: - 使用 `Date.now()` 替代 `new Date().getTime()` 更高效 - 清除定时器:倒计时结束时调用 `clearInterval` 4. **回调机制**: - 倒计时结束时自动触发回调函数 - 可在回调中更新UI状态或执行其他操作 ### 使用示例 ```javascript // 启动28分钟倒计时 startCountdown(28, () => { alert(&#39;会议已结束!&#39;); document.getElementById(&#39;status&#39;).textContent = &#39;已过期&#39;; }); // 启动自定义时间倒计时 document.getElementById(&#39;start-btn&#39;).addEventListener(&#39;click&#39;, () => { const mins = document.getElementById(&#39;minutes-input&#39;).value; startCountdown(mins, handleExpired); }); ``` ### 注意事项 1. **时间精度**:`setInterval` 并非绝对精确,但1秒误差可接受 2. **页面隐藏**:如需后台运行,建议使用 Web Worker 3. **内存泄漏**:确保组件卸载时清除定时器 4. **时区处理**:所有时间计算均使用UTC时间,避免时区问题 > 此实现适用于需要倒计时功能的场景如:限时活动、考试计时、会议提醒等。核心逻辑与Vue组件类似但更轻量[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值