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

让我详细讲解“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日

相关文章

  • javascript数组操作(创建、元素删除、数组的拷贝)

    下面我来给你讲解一下 JavaScript 数组操作(创建、元素删除、数组的拷贝)的完整攻略。 创建数组 数组是 JavaScript 中的一种特殊的数据类型,用逗号分隔的多个值,可以使用数组字面量语法创建数组,也可以使用 Array 构造函数来创建数组。 数组字面量语法创建数组 可以使用方括号 [] 创建一个空数组,并用逗号分隔元素。例如: let arr…

    JavaScript 2023年5月27日
    00
  • 如何解决日期函数new Date()浏览器兼容性问题

    针对new Date()浏览器兼容性问题,我们可以采用以下两种方法进行解决: 方法一:使用标准格式的日期字符串 在使用new Date()函数时,传入的参数格式需要满足标准格式的日期字符串。例如:’2021-07-01’。 同时,我们还需要注意以下几点: 月份需要减一,例如7月应该写成6。 IE8及其以下版本不支持使用’-‘分隔符,需要使用’/’。 下面是一…

    JavaScript 2023年6月10日
    00
  • springboot中JSONObject遍历并替换部分json值

    首先需要明确的是,JSONObject是Java中的一个JSON对象,用于操作JSON数据。在SpringBoot中,我们可以使用Spring的RestController注解来接收并处理JSON数据,然后使用JSONObject进行处理。 接下来,介绍一下如何遍历JSONObject并替换部分json值。一般情况下,我们可以使用迭代器来遍历一个JSONOb…

    JavaScript 2023年6月11日
    00
  • JS正则表达式比较常见用法

    接下来我来为大家详细讲解JS正则表达式比较常见用法的完整攻略。 什么是正则表达式? 正则表达式是一种在字符串中匹配模式的方式。在JS编程中,我们可以使用正则表达式来实现字符串的搜索、替换以及分隔等操作。JS中的正则表达式都是一个对象,我们可以通过RegExp类来创建。 如何创建正则表达式 有两种方式创建正则表达式,分别为使用字面量和使用构造函数: 使用字面量…

    JavaScript 2023年6月11日
    00
  • JS难点同步异步和作用域与闭包及原型和原型链详解

    JS难点同步异步和作用域与闭包及原型和原型链详解攻略 JavaScript在前端开发中非常重要,但其语言特性较为复杂,其中同步异步和作用域与闭包及原型和原型链都是前端开发人员需要掌握的难点。下面我们就来详细讲解这三个难点的知识点及应用。 同步异步 在JS中同步执行和异步执行是最常见的两种执行方式。同步执行即是代码按照写入顺序依次执行,每一行代码等待上一行代码…

    JavaScript 2023年6月10日
    00
  • 详解JavaScript中typeof与instanceof用法

    详解JavaScript中typeof与instanceof用法 typeof typeof 是用于判断一个变量的基本数据类型的关键字,无法判断对象的具体类型。 如果变量是字符串,返回 “string”。 如果变量是数字,返回 “number”。 如果变量是布尔型,返回 “boolean”。 如果变量是对象,返回 “object”。 如果变量是函数,返回 “…

    JavaScript 2023年5月27日
    00
  • 彪哥1.1(智能表格)提供下载

    彪哥1.1(智能表格)提供下载攻略 为了方便用户使用本站提供的智能表格工具“彪哥1.1”,作者特别提供了下载服务。下面是使用该工具的攻略。 1. 下载地址 下载地址为 https://example.com/biaoge.zip。 2. 下载过程 使用浏览器下载 在浏览器输入下载地址,如上文提供的https://example.com/biaoge.zip,…

    JavaScript 2023年6月10日
    00
  • document.getElementById的一些细节

    当我们在JavaScript中使用DOM操作时,document.getElementById方法是最基本且常用的方法之一,主要用于通过元素的ID获取该元素对象。 下面是一些document.getElementById的细节: 获取不存在的ID时返回null 当我们使用document.getElementById获取ID并且此ID不存在的时候,该方法会返…

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