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

yizhihongxing

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日

相关文章

  • 浅谈JS正则表达式的RegExp对象和括号的使用

    浅谈JS正则表达式的RegExp对象和括号的使用 正则表达式是一种用来精确匹配字符串的工具,而JavaScript中的RegExp对象可以帮助我们在代码中使用正则表达式。 RegExp对象 在JavaScript中,RegExp对象可以通过构造函数创建: // 创建正则表达式 const regex = new RegExp(‘ab+c’); // 或者 c…

    JavaScript 2023年6月10日
    00
  • JavaScript中块级作用域与函数作用域深入剖析

    JavaScript中块级作用域与函数作用域深入剖析 在JavaScript中,作用域是指在程序中可以直接访问变量的区域。JavaScript中常见的两种作用域是块级作用域和函数作用域。本文将深入讲解JavaScript中块级作用域和函数作用域的内部原理。 块级作用域 块级作用域指定义在代码块内部的变量和函数。在ES6之前,JavaScript并没有块级作用…

    JavaScript 2023年6月10日
    00
  • JS多个表单数据提交下的serialize()应用实例分析

    下面我将详细讲解“JS多个表单数据提交下的serialize()应用实例分析”的完整攻略。 概述 在Web开发中,我们通常会使用表单来收集用户的数据,并将这些数据提交到服务器端。而在客户端将表单数据序列化为字符串时,我们可以使用serialize()方法。这个方法将所有的表单字段序列化为标准的URL编码表示形式。 但是,如果我们的页面有多个表单,该如何进行多…

    JavaScript 2023年6月10日
    00
  • JS对字符串编码的几种方式使用指南

    JS对字符串编码的几种方式使用指南 在前端开发中,我们经常需要处理字符串编码的相关问题,如将字符串进行编码、解码等。本文将介绍JS中对于字符串编码的几种方式以及它们的使用方法,同时提供相应的示例。 Unicode编码 Unicode编码是一种用于表示各种字符的标准,它规定了字符集、编码方式、具体字符的表示方法等,是目前最常用的字符编码标准之一。在JS中,我们…

    JavaScript 2023年5月20日
    00
  • JavaScript控制浏览器全屏显示简单示例

    关于“JavaScript控制浏览器全屏显示简单示例”的攻略,可以按照以下步骤进行: 1. HTML页面中添加按钮 首先,在HTML页面中添加一个按钮,以便在单击该按钮时全屏显示页面。可以使用以下代码: <button onclick="toggleFullScreen()">全屏显示</button> 其中onc…

    JavaScript 2023年6月11日
    00
  • Javascript Math SQRT2 属性

    JavaScript中的Math.SQRT2属性是一个常数,表示2的平方根。以下是关于Math.SQRT2属性的完整攻略,含两个示例。 JavaScript Math对象的SQRT2属性 JavaScript的SQRT2属性是一个常数,表示2的平方根。下面是SQRT2属性的语法: Math.SQRT2 下面是一个SQRT2属性的示例: console.log…

    JavaScript 2023年5月11日
    00
  • JavaScript使用技巧精萃[代码非常实用]

    JavaScript使用技巧精萃[代码非常实用] 简介 本文将分享一些JavaScript使用技巧,这些技巧涵盖了JavaScript的各个方面,希望能够帮助读者更好地理解和使用JavaScript。 技巧列表 利用let和const声明变量 使用let和const声明变量可以避免变量提升和全局污染的问题。 示例代码: // 使用let声明变量 let a …

    JavaScript 2023年5月19日
    00
  • JS实现单例模式的6种方案汇总

    下面我就详细讲解一下“JS实现单例模式的6种方案汇总”的完整攻略。 什么是单例模式 单例模式是一种常用的设计模式,它可以确保一个类只有一个实例,并提供了一个全局访问点。这对于管理共享的资源非常有用,比如线程池、数据库连接池等。 为什么要使用单例模式 使用单例模式可以避免不必要的资源浪费,提高程序性能,并且可以确保全局的一致性。 6种方案汇总 1. 普通模式 …

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