BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)

BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)攻略

BOM(Browser Object Model)提供了一些和浏览器本身相关的对象,在前端开发中常用的就是定时器。定时器提供了一种方式来在指定时间间隔内调用函数。

setInterval() 和 setTimeout()

在定时器应用中,最常使用的是 setInterval()setTimeout() 这两个方法。

setInterval() 方法会不断调用指定的函数,直到 clearInterval() 被调用或者窗口被关闭。

setTimeout() 方法会在指定的时间间隔后调用一次函数,只执行一次。

这两个定时器都需要传入两个参数:一个是要执行的函数,另一个是时间间隔(毫秒数)。

时钟

我们可以利用 setInterval() 来实现一个简单的时钟。

首先,在 HTML 页面中设定一个显示时间的元素:

<p id="clock"></p>

然后,在 JavaScript 中,用 setInterval() 定时执行一个函数,更新 p 元素中的当前时间:

function updateTime() {
  // 创建当前时间的Date对象
  var now = new Date();

  // 获取时分秒
  var hour = now.getHours();
  var minute = now.getMinutes();
  var second = now.getSeconds();

  // 格式化为两位数
  if (hour < 10) {
    hour = '0' + hour;
  }
  if (minute < 10) {
    minute = '0' + minute;
  }
  if (second < 10) {
    second = '0' + second;
  }

  // 在 p 元素中显示时间
  document.getElementById('clock').innerHTML = hour + ':' + minute + ':' + second;
}

// 每秒钟执行 updateTime() 函数
setInterval(updateTime, 1000);

倒计时

我们可以用 setInterval() 来实现一个倒计时功能,例如在网上购物时,商品页面上常见的 “距离结束还剩…” 的倒计时。

首先,在 HTML 页面中设定一个显示时间的元素:

<p id="countdown"></p>

然后,在 JavaScript 中,用 setInterval() 定时执行一个函数,控制倒计时的时间:

// 设置倒计时时间
var endTime = new Date(2022, 2, 14, 8, 0, 0);

function updateCountdown() {
  // 获取当前时间
  var now = new Date();

  // 计算剩余时间
  var leftTime = endTime.getTime() - now.getTime();
  if (leftTime < 0) {
    leftTime = 0;
  }

  // 计算剩余小时、分钟、秒数
  var leftHour = Math.floor(leftTime / (1000 * 60 * 60));
  var leftMinute = Math.floor(leftTime / (1000 * 60)) % 60;
  var leftSecond = Math.floor(leftTime / 1000) % 60;

  // 在 p 元素中显示倒计时
  document.getElementById('countdown').innerHTML = '距离结束还剩 ' + leftHour + ' 小时 ' + leftMinute + ' 分 ' + leftSecond + ' 秒';
}

// 每秒钟执行 updateCountdown() 函数
setInterval(updateCountdown, 1000);

秒表

我们可以利用 setInterval() 实现一个简单的秒表功能。

首先,在 HTML 页面中设定两个按钮 StartStop

<button id="start">Start</button>
<button id="stop">Stop</button>
<p id="stopwatch">00:00.00</p>

然后,在 JavaScript 中,绑定 StartStop 按钮的点击事件,并用 setInterval() 定时更新秒表时间:

// 准备计算用的变量
var startTime = 0;
var elapsedTime = 0;
var intervalId = null;

function updateTime() {
  // 更新计时时间
  var now = new Date().getTime();
  elapsedTime = now - startTime;

  // 格式化为分和秒
  var minutes = Math.floor(elapsedTime / 60000);
  var seconds = Math.floor((elapsedTime - minutes * 60000) / 1000);
  var milliseconds = Math.floor((elapsedTime - minutes * 60000 - seconds * 1000) / 10);
  if (minutes < 10) {
    minutes = '0' + minutes;
  }
  if (seconds < 10) {
    seconds = '0' + seconds;
  }
  if (milliseconds < 10) {
    milliseconds = '0' + milliseconds;
  }

  // 在 p 元素中显示时间
  document.getElementById('stopwatch').innerHTML = minutes + ':' + seconds + '.' + milliseconds;
}

// 绑定 Start 按钮的点击事件
document.getElementById('start').addEventListener('click', function() {
  // 开始计时
  startTime = new Date().getTime();

  // 每10毫秒更新一次时间
  intervalId = setInterval(updateTime, 10);
});

// 绑定 Stop 按钮的点击事件
document.getElementById('stop').addEventListener('click', function() {
  // 停止计时
  clearInterval(intervalId);
});

闹钟

我们可以用 setTimeout() 来实现一个简单的闹钟功能。

首先,在 HTML 页面中设定一个显示时间的元素和一个设置闹钟时间的输入框:

<input type="text" id="alarmTime" />
<button id="setAlarm">Set Alarm</button>
<p id="alarmMessage"></p>

然后,在 JavaScript 中,绑定 Set Alarm 按钮的点击事件,并用 setTimeout() 来在设定时间后触发闹钟事件:

// 绑定 Set Alarm 按钮的点击事件
document.getElementById('setAlarm').addEventListener('click', function() {
  // 获取设定时间
  var alarmTime = document.getElementById('alarmTime').value;

  // 解析时间,并计算需要等待的毫秒数
  var waitTime = new Date(alarmTime).getTime() - new Date().getTime();

  // 设置定时器,在设定时间后触发闹钟事件
  setTimeout(function() {
    document.getElementById('alarmMessage').innerHTML = 'Time\'s up!';
    // 播放声音或者其他提醒
  }, waitTime);
});

这个例子只是简单地在页面上显示了 “Time's up!” 的文字,实际应用中我们需要进行更多的操作,例如播放声音或者其他的提醒。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟) - Python技术站

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

相关文章

  • JavaScript 模拟用户单击事件

    JavaScript 模拟用户单击事件的具体攻略可以分为以下几个步骤: 步骤一:了解单击事件 单击事件是指用户在网页上单击鼠标时触发的事件,我们需要先了解一下如何绑定和触发单击事件。在JavaScript中,可以通过addEventListener方法来绑定事件,如下所示: var button = document.getElementById(‘myBu…

    JavaScript 2023年6月11日
    00
  • 再谈JavaScript线程

    再谈JavaScript线程 在 JavaScript 的多线程模型中,主线程(也称为 UI 线程)是唯一的线程,负责执行 JavaScript 代码、渲染页面,以及处理用户交互事件等任务。由于 JavaScript 是单线程执行的,因此它的处理能力是有限的。当某个耗时的任务需要执行时,主线程就会被阻塞,页面就会失去响应,用户体验也会受到影响。为了解决这个问…

    JavaScript 2023年5月28日
    00
  • 如何调试异步加载页面里包含的js文件

    调试异步加载页面里包含的JS文件是网站开发中一项非常重要的任务。在这里,我将为你提供一些调试异步加载JS的攻略和技巧。 使用Chrome DevTools调试异步加载的JS文件 Chrome DevTools 是一个非常强大的调试工具,它提供了一些重要特性来调试异步加载的 JS 文件。以下是一些示例: 1.通过Sources面板调试异步加载的JS文件 在Ch…

    JavaScript 2023年5月27日
    00
  • JavaScript 数组some()和filter()的用法及区别

    本篇攻略将详细讲解 JavaScript 数组 some() 和 filter() 方法的用法及区别。在讲解之前,需要明确的是,这两个方法均适用于 JavaScript 数组对象,且均为对数组进行遍历和筛选的方法,但使用方式和作用有所不同。 一、JavaScript 数组 some() 方法 1.1 作用 JavaScript 数组 some() 方法用于检…

    JavaScript 2023年5月27日
    00
  • ASP.NET MVC5实现文件上传与地址变化处理(5)

    ASP.NET MVC5实现文件上传与地址变化处理(5) 是一篇介绍如何使用ASP.NET MVC 5实现文件上传和地址变化处理的文章,其中包含了很多实战经验和技巧,下面我们就来详细讲解一下。 首先,该文章中提到了如何在AspNet Mvc中使用jQuery的ajax来上传文件和如何使用JQuery的ajax来处理地址变化。具体步骤如下: 1.文件上传 第一…

    JavaScript 2023年6月11日
    00
  • AutoJs4.4.1免费版快速接通vscode调试脚本的操作方法

    下面是“AutoJs4.4.1免费版快速接通vscode调试脚本的操作方法”的完整攻略: 操作方法 安装AutoJs4.4.1免费版 首先需要安装AutoJs4.4.1免费版,可以在官网或者GitHub上下载相应的安装包。安装完成后,打开AutoJs应用。 安装AutoJs插件 在VSCode中,搜索安装“AutoJs插件”,下载安装后重新启动VSCode。…

    JavaScript 2023年6月11日
    00
  • JavaScript浮点数及运算精度调整详解

    JavaScript浮点数及运算精度调整详解 概述 在JavaScript中,使用浮点数进行运算时会出现精度不准确的情况,这是由于JavaScript中的浮点数采用二进制存储,在进行运算时会出现舍入误差的情况。本文将详细讲解浮点数精度问题,以及如何调整浮点数运算的精度来避免误差。 浮点数精度问题 在JavaScript中,浮点数采用IEEE 754标准进行存…

    JavaScript 2023年6月10日
    00
  • Chrome调试折腾记之JS断点调试技巧

    Chrome调试折腾记之JS断点调试技巧 介绍 Web开发中调试是必不可少的环节之一,Chrome提供了丰富的调试工具来帮助我们定位问题。本文将着重介绍Chrome的JS断点调试技巧。 步骤 步骤一:打开调试工具 打开需要调试的页面,按下 F12 或右键选择 审查元素 ,即可打开 Chrome 的调试工具。 步骤二:在JS代码中插入断点 在需要调试的代码行左…

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