当前位置:首页 > 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中实现本地文件选择可以通过HTML原生的<input type="file">元素实现。创建一个基本的文件选择组件: <template> &l…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue.js…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Objec…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配…