JS之简单秒表的制作(精确到10ms,且没有延迟)

您所在的位置:网站首页 微秒计时器最简单三个步骤 JS之简单秒表的制作(精确到10ms,且没有延迟)

JS之简单秒表的制作(精确到10ms,且没有延迟)

2024-07-08 06:25:32| 来源: 网络整理| 查看: 265

 

这段时间刚接触js,想利用所学的知识自制一款简单的秒表。

制作秒表的思路如下:

1、首先定出功能以及界面。

我的目的是做最简单的秒表,因此只需要开始、结束以及清零的功能。界面如下图所示:

未开始运行:

运行中:  

2、构思实现的方式。

首先,核心方法肯定是 setInterval() 方法,用于周期性地显示时间。 因为我要精确到10ms, 所以设置时间间隔为10。

再者,如何令时间递增?

 

A . 我开始想到的是设置变量 milliSeconds、seconds、minutes 以及 hours 。milliSeconds每10ms递增1, 当 milliSeconds >= 100 时,用milliSeconds模100,同时seconds增1 。同理,seconds 满60时 minutes 递增1 ,minutes 满 60 时 hours 递增1。

但是,为了保证格式的统一性(我想要显示 02:01:24:06,而不是显示 2:1:24:6),于是又将四个变量变为8个变量,思想同上。(代码参见本页最后 “有延时的秒表”)。

不过,在运行的时候出现了延迟问题,并且该延迟还会进行累加。在时间较短时还能比较准确地运行,时间一长,秒表上的时间就会和标准时间误差比较大。

 

B . 为了让延迟减小,我又设计了另外一种方法(实际上这种方法延迟比上一种更高)。此时只用一个time变量,来记录触发 start 按钮以后所经过的毫秒数(time以10ms为单位,下面的a/b/c/d表示毫秒(10ms)、秒、分、时)。为了追求格式的统一性,我加入了 if 语句,当a/b/c/d小于10时,前面添加 0 占位。

                var a=time%100;                var b=time%6000/100;                var c=time%360000/6000;                var d=time%8640000/360000;

将方案A与B比较。由于A用了嵌套的形式来计算时间,在时间较短时,方案A判断的次数较少,效率较高;而对于方案B来说,每次循环必然要经过四次计算,因此,在时间较短时, 效率甚至比A还低。

 

C . 为了与真实时间同步,不产生任何误差,我又想到了另一种方式。在JS的Date对象里面,有一个方法叫做 getTime(), 用于返回 1970 年 1 月 1 日至今的毫秒数。在点击start时,触发 getTime() ,以此时间作为基准,每十毫秒执行一次  getTime() ,让后者减去前者得到相对时间。这样一来,就完美解决了与真实时间同步的问题。

 

下面附上三段代码:

代码A

1 doctype html> 2 3 4 有延迟的秒表 5 6 7 8 9 00 : 10 00 : 11 00 : 12 00 13 14 15 16 17 var milliSeconds1 = document.getElementById("span41"); 18 var milliSeconds0 = document.getElementById("span40"); 19 var seconds1 = document.getElementById("span31"); 20 var seconds0 = document.getElementById("span30"); 21 var minutes1 = document.getElementById("span21"); 22 var minutes0 = document.getElementById("span20"); 23 var hours1 = document.getElementById("span11"); 24 var hours0 = document.getElementById("span10"); 25 var flag; 26 27 function whenClick(){// 开始/暂停 28 var inputValue = document.getElementById("input1"); 29 if(inputValue.value=="start"||inputValue.value=="continue"){ 30 inputValue.value=" stop"; 31 start1(); 32 } 33 else { 34 inputValue.value="continue"; 35 stop1(); 36 } 37 } 38 39 function clear1(){// 清零 40 stop1(); 41 milliSeconds1.innerHTML = milliSeconds0.innerHTML = 42 seconds1.innerHTML = seconds0.innerHTML = minutes1.innerHTML = 43 minutes0.innerHTML = hours1.innerHTML = hours0.innerHTML = 0; 44 document.getElementById("input1").value = "start"; 45 } 46 47 function start1(){// 开始/继续 48 flag = setInterval("timeIncrement();",10); 49 } 50 51 function timeIncrement(){ 52 milliSeconds1.innerHTML++; 53 if(milliSeconds1.innerHTML>=10){ 54 milliSeconds1.innerHTML%=10; 55 milliSeconds0.innerHTML++; 56 if(milliSeconds0.innerHTML>=10){ 57 milliSeconds0.innerHTML%=10; 58 seconds1.innerHTML++; 59 if(seconds1.innerHTML>=10){ 60 seconds1.innerHTML%=10; 61 seconds0.innerHTML++; 62 if(seconds0.innerHTML>=6){ 63 seconds0.innerHTML%=6 64 minutes1.innerHTML++; 65 if(minutes1.innerHTML>=10){ 66 minutes1.innerHTML%=10; 67 minutes0.innerHTML++; 68 if(minutes0.innerHTML>=6){ 69 minute0.innerHTML%=6; 70 hours1.innerHTML++; 71 if(hours1.innerHTML>=10){ 72 hours1.innerHTML%=10; 73 hours0.innerHTML++; 74 } 75 } 76 } 77 } 78 } 79 } 80 } 81 } 82 83 function stop1(){// 暂停/停止 84 clearInterval(flag); 85 } 86 87 88 89

代码B

1 doctype html> 2 3 4 仍然有延迟的秒表 5 6 7 8 9 00 : 10 00 : 11 00 : 12 00 13 14 15 16 17 var milliSeconds1 = document.getElementById("span4"); 18 var seconds1 = document.getElementById("span3"); 19 var minutes1 = document.getElementById("span2"); 20 var hours1 = document.getElementById("span1"); 21 var time = 0; 22 var flag; 23 24 function whenClick(){// 开始/暂停 25 var inputValue = document.getElementById("input1"); 26 if(inputValue.value=="start"||inputValue.value=="continue"){ 27 inputValue.value=" stop"; 28 start1(); 29 } 30 else { 31 inputValue.value="continue"; 32 stop1(); 33 } 34 } 35 36 function clear1(){// 清零 37 stop1(); 38 milliSeconds1.innerHTML = seconds1.innerHTML =minutes1.innerHTML = hours1.innerHTML = "00"; 39 time=0; 40 document.getElementById("input1").value = "start"; 41 } 42 43 function start1(){// 开始/继续 44 flag = setInterval("timeIncrement();",10); 45 } 46 47 function timeIncrement(){ 48 time++; 49 var a=time%100; 50 var b=time%6000/100; 51 var c=time%360000/6000; 52 var d=time%8640000/360000; 53 milliSeconds1.innerHTML=(adoctype html> 2 3 4 秒表 5 6 7 8 9 00 : 10 00 : 11 00 : 12 00 13 14 15 16 17 var milliSeconds1 = document.getElementById("span4"); 18 var seconds1 = document.getElementById("span3"); 19 var minutes1 = document.getElementById("span2"); 20 var hours1 = document.getElementById("span1"); 21 var time=0; 22 var pre_time=0; 23 var intervals=0; 24 var pre_intervals=0; 25 var flag; 26 27 function whenClick(){// 开始/暂停 28 var inputValue = document.getElementById("input1"); 29 if(inputValue.value=="start"||inputValue.value=="continue"){ 30 var date= new Date(); 31 time = date.getTime(); 32 pre_time=time; 33 inputValue.value="stop "; 34 start1(); 35 } 36 else { 37 inputValue.value="continue"; 38 stop1(); 39 } 40 } 41 42 function clear1(){// 清零 43 stop1(); 44 milliSeconds1.innerHTML = seconds1.innerHTML =minutes1.innerHTML = hours1.innerHTML = "00"; 45 time=0; 46 pre_time=0; 47 intervals=0; 48 pre_intervals=0; 49 document.getElementById("input1").value = "start"; 50 } 51 52 function start1(){// 开始/继续 53 flag = setInterval("timeIncrement();",10); 54 } 55 56 function timeIncrement(){ 57 date = new Date(); 58 intervals=date.getTime()-time+pre_intervals; 59 var a=intervals%1000/10; 60 var b=intervals%60000/1000; 61 var c=intervals%3600000/60000; 62 var d=intervals/3600000; 63 milliSeconds1.innerHTML=(a


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭