JS实现按钮控制计时开始和停止功能

yizhihongxing

让我详细讲解“JS实现按钮控制计时开始和停止功能”的完整攻略:

1. 准备工作

首先,我们需要在HTML中创建两个按钮,一个用于开始计时,一个用于停止计时。按钮的点击事件可以直接在HTML中定义或者在JavaScript中动态绑定。

<button id="start-btn">开始计时</button>
<button id="stop-btn">停止计时</button>

在JavaScript中,我们需要创建一个计时器对象来实现计时的功能。使用setInterval()方法来将计时器对象绑定到具体的函数上。

let timerId; // 计时器对象

function startTimer() {
  timerId = setInterval(() => {
    // 每次执行的代码
  }, 1000);
}

2. 开始计时

当用户点击“开始计时”按钮时,我们需要调用startTimer()方法来启动计时器对象。点击事件可以使用addEventListener()方法来动态绑定。

const startBtn = document.getElementById('start-btn');

startBtn.addEventListener('click', () => {
  startTimer();
});

3. 停止计时

当用户点击“停止计时”按钮时,我们需要停止计时器对象的执行。这可以使用clearInterval()方法来实现,并且需要注意清除计时器对象的同时将其设置为null,以便于下一次计时的启动。

const stopBtn = document.getElementById('stop-btn');

stopBtn.addEventListener('click', () => {
  clearInterval(timerId);
  timerId = null;
});

示例一

下面是一个完整的示例,可以查看CodePen

<!DOCTYPE html>
<html lang="zh-Hans">
<head>
  <meta charset="UTF-8">
  <title>JS计时器示例</title>
</head>
<body>
  <button id="start-btn">开始计时</button>
  <button id="stop-btn">停止计时</button>
  <p id="time-display">00:00:00</p>

  <script>
    const startBtn = document.getElementById('start-btn');
    const stopBtn = document.getElementById('stop-btn');
    const timeDisplay = document.getElementById('time-display');

    let timerId; // 计时器对象
    let time = 0; // 计时时间

    function startTimer() {
      timerId = setInterval(() => {
        time++;
        timeDisplay.textContent = formatTime(time);
      }, 1000);
    }

    function stopTimer() {
      clearInterval(timerId);
      timerId = null;
      time = 0;
      timeDisplay.textContent = formatTime(time);
    }

    function formatTime(t) {
      let hour = Math.floor(t / 3600);
      let minute = Math.floor((t % 3600) / 60);
      let second = t % 60;
      return `${formatNumber(hour)}:${formatNumber(minute)}:${formatNumber(second)}`;
    }

    function formatNumber(n) {
      return n < 10 ? `0${n}` : n;
    }

    startBtn.addEventListener('click', () => {
      if (!timerId) {
        startTimer();
      }
    });

    stopBtn.addEventListener('click', () => {
      if (timerId) {
        stopTimer();
      }
    });
  </script>
</body>
</html>

这个示例中,我们创建了一个计时器对象,使用setInterval()方法将其绑定到一个计时函数上。当用户点击“开始计时”按钮时,启动计时器对象;当用户点击“停止计时”按钮时,停止计时器对象的执行,并将计时时间归零。

示例二

下面我们来看一下另外一个示例,这个示例使用了面向对象的编程方式,并且支持暂停和继续计时的功能。你可以在CodePen查看完整代码。

<!DOCTYPE html>
<html lang="zh-Hans">
<head>
  <meta charset="UTF-8">
  <title>JS计时器示例</title>
</head>
<body>
  <button id="start-btn">开始计时</button>
  <button id="pause-btn">暂停计时</button>
  <button id="resume-btn">继续计时</button>
  <button id="stop-btn">停止计时</button>
  <p id="time-display">00:00:00</p>

  <script>
    class Timer {
      constructor() {
        this.time = 0;
        this.timerId = null;
        this.running = false;
        this.paused = false;
        this.startBtn = document.getElementById('start-btn');
        this.pauseBtn = document.getElementById('pause-btn');
        this.resumeBtn = document.getElementById('resume-btn');
        this.stopBtn = document.getElementById('stop-btn');
        this.timeDisplay = document.getElementById('time-display');
        this.startBtn.addEventListener('click', () => this.start());
        this.pauseBtn.addEventListener('click', () => this.pause());
        this.resumeBtn.addEventListener('click', () => this.resume());
        this.stopBtn.addEventListener('click', () => this.stop());
        this.update();
      }

      start() {
        if (!this.running) {
          this.timerId = setInterval(() => {
            this.time++;
            this.update();
          }, 1000);
          this.running = true;
          this.paused = false;
        }
      }

      pause() {
        if (this.running && !this.paused) {
          clearInterval(this.timerId);
          this.paused = true;
        }
      }

      resume() {
        if (this.running && this.paused) {
          this.timerId = setInterval(() => {
            this.time++;
            this.update();
          }, 1000);
          this.paused = false;
        }
      }

      stop() {
        if (this.running) {
          clearInterval(this.timerId);
          this.time = 0;
          this.running = false;
          this.paused = false;
          this.update();
        }
      }

      update() {
        this.timeDisplay.textContent = this.formatTime(this.time);
        if (this.running) {
          this.startBtn.disabled = true;
          this.pauseBtn.disabled = false;
          this.resumeBtn.disabled = true;
          this.stopBtn.disabled = false;
        } else {
          this.startBtn.disabled = false;
          this.pauseBtn.disabled = true;
          this.resumeBtn.disabled = true;
          this.stopBtn.disabled = true;
        }
        if (this.paused) {
          this.startBtn.disabled = true;
          this.pauseBtn.disabled = true;
          this.resumeBtn.disabled = false;
          this.stopBtn.disabled = false;
        }
      }

      formatTime(t) {
        let hour = Math.floor(t / 3600);
        let minute = Math.floor((t % 3600) / 60);
        let second = t % 60;
        return `${this.formatNumber(hour)}:${this.formatNumber(minute)}:${this.formatNumber(second)}`;
      }

      formatNumber(n) {
        return n < 10 ? `0${n}` : n;
      }
    }

    const timer = new Timer();
  </script>
</body>
</html>

这个示例中,我们定义了Timer类来封装计时器的实现。这个类中包含了开始、暂停、继续、停止计时的方法,以及更新时间、格式化时间等辅助方法。这个类中还定义了按钮和时间显示等DOM元素的相关操作。当用户点击相应的按钮时,类中的方法会被调用,从而控制计时器的行为。值得一提的是,这个示例支持暂停和继续计时的功能,这是在第一个示例中没有涉及的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现按钮控制计时开始和停止功能 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 使用js编写实现拼图游戏

    当你想要使用JS编写实现拼图游戏的时候,你需要遵循如下的步骤: 1. 确定游戏规则和目标 在编写拼图游戏之前,你需要确定游戏的规则和目标。例如,游戏可以是一个15方块的格子,每个方块初始位置随机分布,玩家需要通过移动方块来拼成完整的图案。游戏的目标是以最少的移动步骤完成拼图。 2. 创建HTML模板 使用html创建一个基础游戏界面,在这个游戏界面中,你需要…

    JavaScript 2023年6月10日
    00
  • JavaScript中instanceof运算符的用法总结

    标题:JavaScript中instanceof运算符的用法总结 1. 简介 在JavaScript中,instanceof是一种语法特性,用于检查一个实例是否属于某个类或原型链中的某一级原型对象。该运算符通常被用来判断变量类型、判断是否为某个类的实例等。 2. 语法 instanceof 运算符的语法如下: object instanceof constr…

    JavaScript 2023年6月10日
    00
  • js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器 原创

    实现将文本框的内容保存为本地文件可以使用 Blob + URL 或 FileSaver.js 两种方式来兼容多种浏览器。 使用 Blob + URL 首先,获取文本框内容: javascript var text = document.getElementById(‘text’).value; 然后,新建 Blob 对象并设置 MIME 类型: javasc…

    JavaScript 2023年5月27日
    00
  • JavaScript事件循环及宏任务微任务原理解析

    JavaScript事件循环及宏任务微任务原理解析 在学习 JavaScript 过程中,事件循环机制是必须要掌握的知识点之一。本文将详细介绍 JavaScript 事件循环机制的原理,以及宏任务和微任务的概念及异同点,其中包含两个示例说明。 事件循环机制的原理 JavaScript 是单线程执行的,意味着同一时间只能执行一段代码。然而在 Web 世界中,我…

    JavaScript 2023年6月11日
    00
  • Javascript获取当前时间函数和时间操作小结

    下面我来为你详细讲解一下“Javascript获取当前时间函数和时间操作小结”的完整攻略。 Javascript获取当前时间函数和时间操作小结 获取当前时间 在Javascript中,我们可以使用Date()对象来获取当前时间。调用该对象,即可获得当前本地时间的完整字符串表示,格式如下: Thu Mar 05 2020 20:13:07 GMT+0800 (…

    JavaScript 2023年5月27日
    00
  • 详解vue的双向绑定原理及实现

    关于《详解vue的双向绑定原理及实现》的攻略,我们可以分为以下几个部分进行讲解: 一、什么是双向绑定?为何要使用双向绑定? 双向绑定 Vue.js 中的双向绑定是将数据与视图进行双向绑定。在数据发生变化时,视图会自动更新并显示最新的状态;而在用户交互改变视图的值时,数据也会自动更新。 使用双向绑定的好处 使用双向绑定可以使我们写的代码更加简洁明了,减少了大量…

    JavaScript 2023年6月11日
    00
  • 浅谈JS数组内置遍历方法有哪些和区别

    让我来详细讲解一下“浅谈JS数组内置遍历方法有哪些和区别”这个话题。 一、JS数组内置遍历方法 JS数组内置了很多遍历方法,其中常用的有以下五种: 1. forEach() forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。forEach() 不会返回任何值。 示例: const arr = [‘apple’, ‘orange’, ‘b…

    JavaScript 2023年5月27日
    00
  • JavaScript Date 知识浅析

    JavaScript Date 知识浅析 什么是 JavaScript Date? JavaScript Date 是 JavaScript 提供的内置对象之一,用于处理日期和时间的相关操作。它允许您创建和格式化日期、获取和设置不同的日期和时间值,以及执行其他日期和时间操作。 如何创建 Date 对象? 要创建一个新的 Date 对象,可以使用以下语法: n…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部