当前位置:首页 > JavaScript

js实现计时器效果

2026-03-01 22:34:53JavaScript

实现基础计时器

使用 setInterval 创建基础计时器,每隔1秒更新显示时间:

let seconds = 0;
const timer = setInterval(() => {
  seconds++;
  console.log(`已运行: ${seconds}秒`);
}, 1000);

// 停止计时器
// clearInterval(timer);

格式化时间显示

将秒数转换为更易读的 HH:MM:SS 格式:

js实现计时器效果

function formatTime(seconds) {
  const h = Math.floor(seconds / 3600).toString().padStart(2, '0');
  const m = Math.floor((seconds % 3600) / 60).toString().padStart(2, '0');
  const s = (seconds % 60).toString().padStart(2, '0');
  return `${h}:${m}:${s}`;
}

带控制按钮的计时器

HTML 结构配合 JavaScript 实现完整控制:

js实现计时器效果

<div id="timer">00:00:00</div>
<button id="start">开始</button>
<button id="pause">暂停</button>
<button id="reset">重置</button>
let timerId;
let seconds = 0;
const display = document.getElementById('timer');

document.getElementById('start').addEventListener('click', () => {
  if (!timerId) {
    timerId = setInterval(() => {
      seconds++;
      display.textContent = formatTime(seconds);
    }, 1000);
  }
});

document.getElementById('pause').addEventListener('click', () => {
  clearInterval(timerId);
  timerId = null;
});

document.getElementById('reset').addEventListener('click', () => {
  clearInterval(timerId);
  timerId = null;
  seconds = 0;
  display.textContent = '00:00:00';
});

使用 requestAnimationFrame 实现高精度计时

适合需要更高精度的场景:

let startTime;
let elapsedTime = 0;
let animationFrameId;

function updateTimer(timestamp) {
  if (!startTime) startTime = timestamp;
  elapsedTime = timestamp - startTime;

  const seconds = Math.floor(elapsedTime / 1000);
  document.getElementById('timer').textContent = formatTime(seconds);

  animationFrameId = requestAnimationFrame(updateTimer);
}

// 启动
function start() {
  animationFrameId = requestAnimationFrame(updateTimer);
}

// 停止
function stop() {
  cancelAnimationFrame(animationFrameId);
}

带暂停功能的计时器

保存暂停时的状态以便恢复:

let startTime;
let pauseTime = 0;
let isRunning = false;

function startTimer() {
  if (!isRunning) {
    startTime = Date.now() - pauseTime;
    isRunning = true;
    updateDisplay();
  }
}

function pauseTimer() {
  if (isRunning) {
    pauseTime = Date.now() - startTime;
    isRunning = false;
    clearTimeout(timerId);
  }
}

function updateDisplay() {
  if (isRunning) {
    const elapsed = Date.now() - startTime;
    document.getElementById('timer').textContent = formatTime(Math.floor(elapsed / 1000));
    timerId = setTimeout(updateDisplay, 1000);
  }
}

标签: 计时器效果
分享给朋友:

相关文章

vue实现日历效果

vue实现日历效果

Vue实现日历效果的方法 使用第三方库 Vue生态中有多个成熟的日历组件库,如v-calendar或vue2-calendar,可以快速实现日历功能。安装后直接引入组件即可使用。 npm insta…

vue 实现拖动效果

vue 实现拖动效果

使用 Vue 实现拖动效果 Vue 提供了多种方式实现拖动效果,可以通过原生 HTML5 的拖放 API,也可以使用第三方库如 vuedraggable。以下是两种常见的方法: 使用 HTML5 拖…

vue实现卡片效果

vue实现卡片效果

Vue实现卡片效果的方法 使用Vue实现卡片效果可以通过多种方式完成,包括使用原生CSS、UI框架或自定义组件。以下是几种常见方法: 使用原生CSS和Vue组件 创建一个简单的卡片组件,结合CSS实…

vue实现选中效果

vue实现选中效果

实现选中效果的方法 在Vue中实现选中效果可以通过多种方式,常见的有使用v-bind:class动态绑定类名、利用v-model与表单元素结合,或通过状态管理控制选中样式。以下是几种典型实现方案:…

vue实现爆炸图效果

vue实现爆炸图效果

实现爆炸图效果的方法 爆炸图(Exploded View)常用于展示产品或组件的拆解效果,以下是基于Vue的实现方案: 使用CSS 3D变换实现基础爆炸效果 通过CSS的transform属性控制元…

vue 实现货架效果

vue 实现货架效果

实现货架效果的基本思路 货架效果通常指在网页中展示商品或物品的网格布局,可能包含拖拽排序、分类筛选、动画交互等功能。Vue.js 结合第三方库(如 vue-draggable 或 CSS Grid)可…