首页 > 其他分享 >Vue2 项目实战:打造一个简易倒计时计时器工具 Vue2 实践教程:如何实现一个工作与休息倒计时工具 从零开始:使用 Vue2 构建你的倒计时计时器 初学者友好:Vue2 实现简单倒计时应用,附完整

Vue2 项目实战:打造一个简易倒计时计时器工具 Vue2 实践教程:如何实现一个工作与休息倒计时工具 从零开始:使用 Vue2 构建你的倒计时计时器 初学者友好:Vue2 实现简单倒计时应用,附完整

时间:2024-10-22 22:46:48浏览次数:10  
标签:seconds 模式 倒计时 计时器 Vue2 minutes 休息

效果图

在这里插入图片描述

Vue2 倒计时计时器工具教程

在本教程中,我们将一步步实现一个 Vue2 倒计时计时器工具。这个工具允许用户在工作和休息模式之间切换,并设置倒计时时间。倒计时结束时,系统会发出提醒,提示用户切换工作或休息状态。非常适合初学者练习 Vue 的数据绑定、计算属性和事件处理等基础知识。

目录
  1. 项目介绍
  2. 需求分析
  3. 搭建步骤
  4. 详细代码实现
  5. 扩展功能建议
  6. 吸引人的博客标题建议

项目介绍

本项目旨在使用 Vue2 实现一个简单的倒计时计时器,用户可以设置计时器的模式(工作模式或休息模式),并根据倒计时结果进行提示。项目主要包括时间的倒计时逻辑、模式切换以及倒计时结束时的提醒功能。

需求分析

  1. 工作模式与休息模式:用户可以选择工作模式(25分钟)或休息模式(5分钟),每种模式都会有相应的默认时间设置。
  2. 倒计时功能:当用户设置好时间并点击“开始”按钮时,倒计时开始并每秒递减,直到倒计时结束。
  3. 提醒功能:当倒计时结束时,系统会弹出提示,提醒用户该开始休息或继续工作。
  4. 重置功能:用户可以随时点击“重置”按钮将计时器恢复到默认的时间设置。

搭建步骤

1. 搭建基础页面结构

首先,我们需要为倒计时计时器工具创建一个基本的页面结构,页面包含:

  • 标题显示。
  • 用户选择模式的单选按钮(工作模式或休息模式)。
  • 输入框用于设置分钟数。
  • 显示倒计时的区域。
  • “开始”和“重置”按钮。

HTML 结构如下:

<div id="app">
  <div class="container">
    <h2>倒计时计时器</h2>
    <div class="timer-mode">
      <label>
        <input type="radio" value="work" v-model="timerMode"> 工作模式
      </label>
      <label>
        <input type="radio" value="break" v-model="timerMode"> 休息模式
      </label>
    </div>

    <input 
      type="number" 
      v-model.number="minutes" 
      placeholder="设置分钟" 
    />
    <div class="timer-display">{{ formattedTime }}</div>

    <button @click="startTimer" :disabled="isActive">开始</button>
    <button @click="resetTimer">重置</button>

    <p>{{ message }}</p>
  </div>
</div>
2. 实现倒计时逻辑

倒计时通过 Vue 的 setInterval 来实现,使用 minutesseconds 来管理时间的递减。每秒钟递减一秒,当秒数为 0 且分钟也为 0 时,倒计时结束,并触发提醒。

startTimer() {
  if (this.isActive) return;
  this.isActive = true;

  this.timer = setInterval(() => {
    if (this.seconds === 0) {
      if (this.minutes === 0) {
        clearInterval(this.timer);
        this.isActive = false;
        this.alertUser();
        return;
      }
      this.minutes--;
      this.seconds = 59;
    } else {
      this.seconds--;
    }
  }, 1000);
}
3. 处理模式切换

我们提供了两个模式:工作模式(25分钟)和休息模式(5分钟)。当用户选择模式时,倒计时会自动调整到相应的时间,使用 watch 监视模式的变化来触发时间重置。

watch: {
  timerMode(newMode) {
    if (newMode === 'work') {
      this.minutes = 25;
      this.seconds = 0;
    } else if (newMode === 'break') {
      this.minutes = 5;
      this.seconds = 0;
    }
    this.resetTimer();
  }
}
4. 实现提醒功能

当倒计时结束时,系统会弹出一个提醒框,告知用户当前模式下时间已结束。提醒使用浏览器的 alert() 函数来实现。

alertUser() {
  this.message = this.timerMode === 'work' 
    ? "工作时间结束了!请休息一下。"
    : "休息时间结束了!准备开始工作。";
  alert(this.message);
}

详细代码实现

完整的 Vue2 倒计时计时器工具代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue2 倒计时计时器工具</title>
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
  <style>
    body {
      font-family: Arial, sans-serif;
      background-color: #f0f0f0;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
    }
    .container {
      background-color: white;
      padding: 20px;
      border-radius: 10px;
      box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
      width: 400px;
      text-align: center;
    }
    input {
      width: 100px;
      padding: 10px;
      margin: 10px;
      border-radius: 5px;
      border: 1px solid #ccc;
      text-align: center;
    }
    button {
      margin: 5px;
      padding: 10px 20px;
      border: none;
      border-radius: 5px;
      background-color: #4CAF50;
      color: white;
      cursor: pointer;
    }
    button:hover {
      background-color: #45a049;
    }
    .timer-mode {
      margin: 10px 0;
    }
    .timer-display {
      font-size: 2em;
      margin-top: 20px;
    }
  </style>
</head>
<body>

<div id="app">
  <div class="container">
    <h2>倒计时计时器</h2>
    <div class="timer-mode">
      <label>
        <input type="radio" value="work" v-model="timerMode"> 工作模式
      </label>
      <label>
        <input type="radio" value="break" v-model="timerMode"> 休息模式
      </label>
    </div>

    <input 
      type="number" 
      v-model.number="minutes" 
      placeholder="设置分钟" 
    />
    <div class="timer-display">{{ formattedTime }}</div>

    <button @click="startTimer" :disabled="isActive">开始</button>
    <button @click="resetTimer">重置</button>

    <p>{{ message }}</p>
  </div>
</div>

<script>
new Vue({
  el: '#app',
  data() {
    return {
      timerMode: 'work', // 'work' 为工作模式,'break' 为休息模式
      minutes: 25, // 默认工作模式下设置25分钟
      seconds: 0,
      timer: null,
      isActive: false,
      message: ""
    };
  },
  computed: {
    // 格式化显示时间
    formattedTime() {
      let mins = String(this.minutes).padStart(2, '0');
      let secs = String(this.seconds).padStart(2, '0');
      return `${mins}:${secs}`;
    }
  },
  methods: {
    startTimer() {
      if (this.isActive) return;
      this.isActive = true;

      this.timer = setInterval(() => {
        if (this.seconds === 0) {
          if (this.minutes === 0) {
            clearInterval(this.timer);
            this.isActive = false;
            this.alertUser();
            return;
          }
          this.minutes--;
          this.seconds = 59;
        } else {
          this.seconds--;
        }
      }, 1000);
    },
    resetTimer() {
      clearInterval(this.timer);
      this.isActive = false;
      this.seconds = 0;
      this.minutes = this.timerMode === 'work' ? 25 : 5; // 重置工作为25分钟,休息为5分钟
      this.message = "";
    },
    alertUser() {
      this.message = this.timerMode === 'work' 
        ? "工作时间结束了!请休息一下。"
        : "休息时间结束了!准备开始工作。";
      alert(this.message);
    }
  },
  watch: {
    // 当用户切换计时模式时,自动设置时间
    timerMode(newMode) {
      if (newMode === 'work') {
        this.minutes = 25;
        this.seconds = 0;
      } else if (newMode === 'break') {
        this.minutes = 5;
        this.seconds = 0;
      }
      this.resetTimer(); // 切换模式时重置计时器
    }
  }
});
</script>

</body>
</html>


扩展功能建议

  • 自定义时间设置:让用户能够自定义工作时间和休息时间,而不仅仅是默认的 25 分钟和 5 分钟。
  • 长休息模式:每完成 4 个工作周期后,提供一个长时间休息(如 15 分钟)的模式。
  • 声音提醒:倒计时结束时,除了弹窗提醒,可以加入音效提醒功能。
  • 自动循环模式:工作模式与休息模式可以自动循环切换,减少用户手动操作。

标签:seconds,模式,倒计时,计时器,Vue2,minutes,休息
From: https://blog.csdn.net/qq_22182989/article/details/143170683

相关文章

  • vue2组件
    模块和组件的区别1、模块化从代码逻辑的角度划分;方便代码分层开发,保证每个功能模块的职能单一2、组件化从UI界面的角度划分;前端的组件化,方便UI组件的重用父子组件传参1、父传子1、在父组件的子标签中自定义一个属性2、在子组件中使用props接收参数2、子传父1、在......
  • vue2声明周期
    vue2声明周期beforeCreate(){//创建之前,data和methods的对象还没有初始化,作用:页面重定向console.log('beforeCreate');console.log(this.msg);//undefined},created(){//创建之后,data和methods中的数据初始化完成,第一个可以操作data和met......
  • webpack+vue2 升级 vite+vue2 记录
    2024年了,webpack构建的vue2项目,由于路由较多,每次修改都会出现编译时间较长的问题(平均10~40秒),长期开发的话,非常的不友好。因此决定升级vite构建。参考了几篇文章,基本每篇遇到的坑都不少。本文做一个记录。主要是各个依赖的版本问题。全局安装的vite版本,建议版本4.5.3,......
  • 祝福版的3D标签云动画特效VUE2版本
    <script>exportdefault{name:"dreamView",data(){return{words:['健康码常绿','股票飙红','生意兴隆','财源广进','心想事成','永远十八......
  • Vue2 - 详细实现安装引入百度地图并查询展示周边交通/教育/医疗/商场/生活/娱乐等POI
    前言Vue3版本,请访问在vue2|nuxt2项目开发中,详解高德地图根据当前定位获取周边附近的商圈,vue2高德地图获取周边商圈并将这些地址位置列出来供用户点击跳转和选择,获取当前位置或指定区域周边的交通出行、学校教育、医院诊所、商场购物、生活娱乐、旅游景点、酒店民宿......
  • 【Vue】Vue2(11)
    文章目录1vuex1.1概念1.2什么时候使用Vuex1.3工作原理图1.4vuex核心概念和API1.4.1state1.4.2actions1.4.3mutations1.4.4getters2求和案例_纯vue版2.1静态页面2.2Count.vue2.3App.vue2.4main.js3求和案例_vuex3.1Count.vue3.2store文件夹下:index......
  • 初探Vue2:基础概念与实践指南
    通过记录自己在学习Vue2的过程中的实践经历,复盘项目中的技术应用,巩固Vue2的知识要点,并分享职场中的感悟和心得Vue2简介定义Vue.js,简称Vue,是一个渐进式JavaScript框架,它专注于构建用户界面,易于上手的同时,也能在复杂的应用场景中发挥强大的功能。特点Vue2的核心特点包括:响......
  • Vue3也能用上Vue2写的组件
    文章目录     文章目录概要整体架构流程参考博客实现效果图技术细节小结概要需求:开发一个问题反馈组件,要求企微连线负责人、跳转页面反馈问题...组件可以安装在Vue2、Vue3、React等项目里整体架构流程创建webpack-simple项目,编写组件,部署并发布npm包......
  • Vue2+ECharts+Mock.js实现前端后台通用管理系统页面
    一、前言  在现代Web开发中,前端框架与数据可视化工具的结合能够显著提升用户体验。本文将介绍如何使用Vue2和ECharts构建一个通用的后台管理系统页面。利用Vue2的组件化特性,可以高效管理应用状态与UI交互,而ECharts则提供多样的图表类型,便于展示数据分析结果。通过整合这两......
  • Vue2用户中心页面开发教程:从零开始,用HTML、CSS和Vue构建新手友好的个人中心页面,提供完
    效果图:使用Vue.js构建用户中心页面:从零到实现在本教程中,我们将使用Vue.js构建一个用户中心页面,这是一个常见的Web应用页面。我们将涵盖页面的布局、样式,以及Vue的基本数据绑定和事件处理功能。这是一个为前端新手量身定制的项目,通过此项目可以了解如何快速构建用户友好......