当前位置:首页 > JavaScript

js 实现倒计时

2026-02-28 17:40:46JavaScript

使用 JavaScript 实现倒计时

方法一:使用 setInterval 实现基础倒计时

通过 setInterval 定期更新显示剩余时间,适用于简单的倒计时场景。

js 实现倒计时

function startCountdown(seconds, elementId) {
  const countdownElement = document.getElementById(elementId);
  let remainingSeconds = seconds;

  const timer = setInterval(() => {
    remainingSeconds--;
    countdownElement.textContent = `${remainingSeconds}秒`;

    if (remainingSeconds <= 0) {
      clearInterval(timer);
      countdownElement.textContent = '时间到!';
    }
  }, 1000);
}

// 调用示例:在HTML中需有id为"countdown"的元素
startCountdown(10, 'countdown');

方法二:支持天、时、分、秒的完整倒计时

扩展基础功能,将总秒数转换为更易读的格式。

js 实现倒计时

function formatTime(seconds) {
  const days = Math.floor(seconds / (3600 * 24));
  const hours = Math.floor((seconds % (3600 * 24)) / 3600);
  const minutes = Math.floor((seconds % 3600) / 60);
  const secs = seconds % 60;

  return `${days}天 ${hours}时 ${minutes}分 ${secs}秒`;
}

function startFullCountdown(totalSeconds, elementId) {
  const element = document.getElementById(elementId);
  let remaining = totalSeconds;

  const timer = setInterval(() => {
    remaining--;
    element.textContent = formatTime(remaining);

    if (remaining <= 0) {
      clearInterval(timer);
      element.textContent = '倒计时结束';
    }
  }, 1000);
}

// 调用示例
startFullCountdown(86465, 'fullCountdown'); // 1天1小时1分5秒

方法三:高性能倒计时(减少误差)

使用 Date 对象计算时间差,避免 setInterval 的累积误差。

function startPreciseCountdown(endTime, elementId) {
  const element = document.getElementById(elementId);
  const end = new Date(endTime).getTime();

  function update() {
    const now = new Date().getTime();
    const distance = end - now;

    if (distance <= 0) {
      element.textContent = '时间到!';
      return;
    }

    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);

    element.textContent = `${days}天 ${hours}时 ${minutes}分 ${seconds}秒`;
    requestAnimationFrame(update);
  }

  update();
}

// 调用示例:传入未来时间戳或日期字符串
startPreciseCountdown('2024-12-31 23:59:59', 'preciseCountdown');

方法四:暂停与恢复功能

添加控制按钮实现倒计时的暂停和继续。

<div id="controlledCountdown">60秒</div>
<button id="pauseBtn">暂停</button>
<button id="resumeBtn">继续</button>

<script>
  let timer;
  let remaining = 60;
  const element = document.getElementById('controlledCountdown');
  const pauseBtn = document.getElementById('pauseBtn');
  const resumeBtn = document.getElementById('resumeBtn');

  function updateDisplay() {
    element.textContent = `${remaining}秒`;
  }

  function startTimer() {
    timer = setInterval(() => {
      remaining--;
      updateDisplay();

      if (remaining <= 0) {
        clearInterval(timer);
        element.textContent = '完成';
      }
    }, 1000);
  }

  pauseBtn.addEventListener('click', () => {
    clearInterval(timer);
  });

  resumeBtn.addEventListener('click', () => {
    startTimer();
  });

  startTimer(); // 初始启动
</script>

注意事项

  • 跨标签页时浏览器可能限制定时器执行,可用 Page Visibility API 检测并修正
  • 移动端休眠可能导致计时不准,建议使用后台服务或Web Worker
  • 大量倒计时实例时建议共用单个定时器以提高性能

以上方法可根据实际需求组合或调整,核心逻辑是通过时间差计算并动态更新显示内容。

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

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…