当前位置:首页 > 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 格式:

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 实现完整控制:

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

带暂停功能的计时器

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

js实现计时器效果

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-bind和v-on实现 通过…

vue实现动画效果

vue实现动画效果

Vue 实现动画效果的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及 CSS 动画。以下是几种常见的方法: 使用 Vue 内置的过渡系统 Vue 的 <tra…

vue实现筛选效果

vue实现筛选效果

Vue 实现筛选效果的方法 基于计算属性的筛选 在 Vue 中可以通过计算属性实现数据的动态筛选。定义一个计算属性,根据用户输入的筛选条件返回过滤后的数据列表。 <template>…

vue实现的效果

vue实现的效果

Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是一些常见的 Vue 实现效果及其实现方式: 动态数据绑定 Vue 的核心特性之一是响应式数据绑定。通过将数据与 DOM 元素绑定…

vue实现回弹效果

vue实现回弹效果

Vue 实现回弹效果的方法 回弹效果(Bounce Effect)常见于移动端交互,可以通过 CSS 动画或 JavaScript 实现。以下是几种在 Vue 中实现回弹效果的方案: 使用 CSS…

vue实现标签多选效果

vue实现标签多选效果

实现标签多选效果的方法 在Vue中实现标签多选效果可以通过多种方式完成,以下是几种常见的实现方法: 使用v-model和数组绑定 通过v-model绑定一个数组,当选中标签时,将标签的值添加到数组…