当前位置:首页 > VUE

vue实现秒表

2026-02-10 15:11:35VUE

Vue 实现秒表功能

以下是一个基于 Vue 3 的秒表实现方案,包含开始、暂停、重置功能,并支持显示毫秒级精度。

组件模板部分

<template>
  <div class="stopwatch">
    <div class="display">{{ formattedTime }}</div>
    <div class="controls">
      <button @click="start" :disabled="isRunning">开始</button>
      <button @click="pause" :disabled="!isRunning">暂停</button>
      <button @click="reset">重置</button>
    </div>
  </div>
</template>

脚本部分

<script>
import { ref, computed, onUnmounted } from 'vue';

export default {
  setup() {
    const startTime = ref(0);
    const elapsedTime = ref(0);
    const timerInterval = ref(null);
    const isRunning = ref(false);

    const formattedTime = computed(() => {
      const date = new Date(elapsedTime.value);
      return date.toISOString().substr(11, 12);
    });

    const start = () => {
      if (isRunning.value) return;
      isRunning.value = true;
      startTime.value = Date.now() - elapsedTime.value;
      timerInterval.value = setInterval(() => {
        elapsedTime.value = Date.now() - startTime.value;
      }, 10);
    };

    const pause = () => {
      if (!isRunning.value) return;
      isRunning.value = false;
      clearInterval(timerInterval.value);
    };

    const reset = () => {
      isRunning.value = false;
      clearInterval(timerInterval.value);
      elapsedTime.value = 0;
    };

    onUnmounted(() => {
      clearInterval(timerInterval.value);
    });

    return {
      formattedTime,
      isRunning,
      start,
      pause,
      reset
    };
  }
};
</script>

样式部分

<style scoped>
.stopwatch {
  text-align: center;
  margin: 20px;
}

.display {
  font-size: 2em;
  margin-bottom: 20px;
  font-family: monospace;
}

button {
  margin: 0 5px;
  padding: 8px 16px;
  font-size: 1em;
  cursor: pointer;
}

button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
</style>

实现说明

  1. 核心逻辑:使用 Date.now() 获取当前时间戳,通过计算时间差实现计时功能。

    vue实现秒表

  2. 响应式数据

    • startTime 记录开始计时的时间点
    • elapsedTime 存储已过去的时间(毫秒)
    • timerInterval 保存计时器引用
    • isRunning 控制计时器状态
  3. 格式化显示:通过 computed 属性将毫秒转换为 HH:MM:SS.mmm 格式。

    vue实现秒表

  4. 生命周期:在组件卸载时清除计时器,防止内存泄漏。

  5. 控制按钮:提供开始、暂停、重置三个基本功能,并禁用不合适的操作。

功能扩展建议

  1. 添加分段计时功能(Lap Time)
  2. 增加声音提示
  3. 支持保存历史记录
  4. 添加全屏显示模式
  5. 实现更精确的计时(使用 performance.now()

该实现采用了 Vue 3 的组合式 API,如需在 Vue 2 中使用,可改用选项式 API 并调整相应语法。

标签: 秒表vue
分享给朋友:

相关文章

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用第三方库如axios结合nprogress或自定义进度条组件。以下是几种实现方法: 使用axios和nprogress…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…

vue 实现循环

vue 实现循环

Vue 实现循环的方法 在 Vue 中,可以使用 v-for 指令来实现循环渲染列表数据。以下是几种常见的循环实现方式: 基本数组循环 <template> <ul>…

简单实现vue github

简单实现vue github

实现一个简单的 Vue 项目并上传到 GitHub 创建 Vue 项目 使用 Vue CLI 快速初始化一个 Vue 项目,确保已安装 Node.js 和 npm/yarn。运行以下命令创建项目:…

vue实现页面定位

vue实现页面定位

Vue 实现页面定位的方法 在 Vue 中实现页面定位通常可以通过以下几种方式完成,包括使用原生 JavaScript 的 scrollIntoView 方法、Vue Router 的滚动行为配置,以…

vue实现扫码

vue实现扫码

Vue 实现扫码功能 使用 vue-qrcode-reader 库 安装 vue-qrcode-reader 库: npm install vue-qrcode-reader 在 Vue 组件中引入…