当前位置:首页 > JavaScript

js实现倒计时

2026-01-08 12:24:10JavaScript

实现倒计时的基本方法

使用 JavaScript 实现倒计时功能可以通过 setIntervalsetTimeout 结合日期计算来完成。以下是几种常见的实现方式:

使用 setInterval 实现倒计时

js实现倒计时

function countDown(targetTime) {
  const timer = setInterval(() => {
    const now = new Date().getTime();
    const distance = targetTime - now;

    const days = Math.floor(distance / (1000 * 60 * 60 * 24));
    const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    const seconds = Math.floor((distance % (1000 * 60)) / 1000);

    console.log(`${days}d ${hours}h ${minutes}m ${seconds}s`);

    if (distance < 0) {
      clearInterval(timer);
      console.log('倒计时结束');
    }
  }, 1000);
}

// 示例:倒计时到 2023-12-31 23:59:59
const targetDate = new Date('2023-12-31T23:59:59').getTime();
countDown(targetDate);

使用 setTimeout 实现递归倒计时

function countDownRecursive(targetTime) {
  const now = new Date().getTime();
  const distance = targetTime - now;

  const days = Math.floor(distance / (1000 * 60 * 60 * 24));
  const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  const seconds = Math.floor((distance % (1000 * 60)) / 1000);

  console.log(`${days}d ${hours}h ${minutes}m ${seconds}s`);

  if (distance > 0) {
    setTimeout(() => countDownRecursive(targetTime), 1000);
  } else {
    console.log('倒计时结束');
  }
}

const targetDate = new Date('2023-12-31T23:59:59').getTime();
countDownRecursive(targetDate);

格式化倒计时显示

为了更友好地显示倒计时,可以封装一个格式化函数:

js实现倒计时

function formatTime(days, hours, minutes, seconds) {
  return `${days}天 ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
}

function countDownFormatted(targetTime, elementId) {
  const timer = setInterval(() => {
    const now = new Date().getTime();
    const distance = targetTime - now;

    const days = Math.floor(distance / (1000 * 60 * 60 * 24));
    const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    const seconds = Math.floor((distance % (1000 * 60)) / 1000);

    document.getElementById(elementId).innerHTML = formatTime(days, hours, minutes, seconds);

    if (distance < 0) {
      clearInterval(timer);
      document.getElementById(elementId).innerHTML = '已结束';
    }
  }, 1000);
}

// HTML 中需要有 <div id="countdown"></div>
const targetDate = new Date('2023-12-31T23:59:59').getTime();
countDownFormatted(targetDate, 'countdown');

处理时区问题

如果需要处理时区问题,可以使用 getTimezoneOffset 进行调整:

const targetDate = new Date('2023-12-31T23:59:59');
const offset = targetDate.getTimezoneOffset() * 60000;
const adjustedTime = targetDate.getTime() - offset;
countDown(adjustedTime);

性能优化建议

对于长时间运行的倒计时,建议使用 requestAnimationFrame 替代 setInterval 以提高性能:

function countDownOptimized(targetTime, elementId) {
  function update() {
    const now = new Date().getTime();
    const distance = targetTime - now;

    const days = Math.floor(distance / (1000 * 60 * 60 * 24));
    const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    const seconds = Math.floor((distance % (1000 * 60)) / 1000);

    document.getElementById(elementId).innerHTML = formatTime(days, hours, minutes, seconds);

    if (distance > 0) {
      requestAnimationFrame(update);
    } else {
      document.getElementById(elementId).innerHTML = '已结束';
    }
  }

  requestAnimationFrame(update);
}

以上方法涵盖了 JavaScript 实现倒计时的基本功能、格式化显示、时区处理和性能优化等方面,可以根据实际需求选择适合的实现方式。

标签: 倒计时js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选框 co…

js实现导航菜单

js实现导航菜单

使用HTML和CSS创建基础结构 导航菜单的基础结构通常由HTML的无序列表(<ul>)和列表项(<li>)组成,每个列表项包含一个链接(<a>)。CSS用于样式化…