本篇文章给大家带来的内容是关于利用JS实现一个可精确到10ms的秒表的制作(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

这段时间刚接触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/36000;

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

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

下面附上三段代码:

代码1

有延迟的秒表

00 :

00 :

00 :

00

var milliSeconds1 = document.getElementById("span41");

var milliSeconds0 = document.getElementById("span40");

var seconds1 = document.getElementById("span31");

var seconds0 = document.getElementById("span30");

var minutes1 = document.getElementById("span21");

var minutes0 = document.getElementById("span20");

var hours1 = document.getElementById("span11");

var hours0 = document.getElementById("span10");

var flag;

function whenClick(){// 开始/暂停

var inputValue = document.getElementById("input1");

if(inputValue.value=="start"||inputValue.value=="continue"){

inputValue.value=" stop";

start1();

}

else {

inputValue.value="continue";

stop1();

}

}

function clear1(){// 清零

stop1();

milliSeconds1.innerHTML = milliSeconds0.innerHTML =

seconds1.innerHTML = seconds0.innerHTML = minutes1.innerHTML =

minutes0.innerHTML = hours1.innerHTML = hours0.innerHTML = 0;

document.getElementById("input1").value = "start";

}

function start1(){// 开始/继续

flag = setInterval("timeIncrement();",10);

}

function timeIncrement(){

milliSeconds1.innerHTML++;

if(milliSeconds1.innerHTML>=10){

milliSeconds1.innerHTML%=10;

milliSeconds0.innerHTML++;

if(milliSeconds0.innerHTML>=10){

milliSeconds0.innerHTML%=10;

seconds1.innerHTML++;

if(seconds1.innerHTML>=10){

seconds1.innerHTML%=10;

seconds0.innerHTML++;

if(seconds0.innerHTML>=6){

seconds0.innerHTML%=6

minutes1.innerHTML++;

if(minutes1.innerHTML>=10){

minutes1.innerHTML%=10;

minutes0.innerHTML++;

if(minutes0.innerHTML>=6){

minute0.innerHTML%=6;

hours1.innerHTML++;

if(hours1.innerHTML>=10){

hours1.innerHTML%=10;

hours0.innerHTML++;

}

}

}

}

}

}

}

}

function stop1(){// 暂停/停止

clearInterval(flag);

}

代码2

仍然有延迟的秒表

00 :

00 :

00 :

00

var milliSeconds1 = document.getElementById("span4");

var seconds1 = document.getElementById("span3");

var minutes1 = document.getElementById("span2");

var hours1 = document.getElementById("span1");

var time = 0;

var flag;

function whenClick(){// 开始/暂停

var inputValue = document.getElementById("input1");

if(inputValue.value=="start"||inputValue.value=="continue"){

inputValue.value=" stop";

start1();

}

else {

inputValue.value="continue";

stop1();

}

}

function clear1(){// 清零

stop1();

milliSeconds1.innerHTML = seconds1.innerHTML =minutes1.innerHTML = hours1.innerHTML = "00";

time=0;

document.getElementById("input1").value = "start";

}

function start1(){// 开始/继续

flag = setInterval("timeIncrement();",10);

}

function timeIncrement(){

time++;

var a=time%100;

var b=time%6000/100;

var c=time%360000/6000;

var d=time%8640000/360000;

milliSeconds1.innerHTML=(a<10)?('0'+a):a;

seconds1.innerHTML=(b<10)?('0'+Math.floor(b)):(Math.floor(b));

minutes1.innerHTML=(c<10)?('0'+Math.floor(c)):(Math.floor(c));

hours1.innerHTML=(d<10)?('0'+Math.floor(d)):(Math.floor(d));

}

function stop1(){// 暂停/停止

clearInterval(flag);

}

代码3(与时间同步的代码)

秒表

00 :

00 :

00 :

00

var milliSeconds1 = document.getElementById("span4");

var seconds1 = document.getElementById("span3");

var minutes1 = document.getElementById("span2");

var hours1 = document.getElementById("span1");

var time=0;

var pre_time=0;

var intervals=0;

var pre_intervals=0;

var flag;

function whenClick(){// 开始/暂停

var inputValue = document.getElementById("input1");

if(inputValue.value=="start"||inputValue.value=="continue"){

var date= new Date();

time = date.getTime();

pre_time=time;

inputValue.value="stop ";

start1();

}

else {

inputValue.value="continue";

stop1();

}

}

function clear1(){// 清零

stop1();

milliSeconds1.innerHTML = seconds1.innerHTML =minutes1.innerHTML = hours1.innerHTML = "00";

time=0;

pre_time=0;

intervals=0;

pre_intervals=0;

document.getElementById("input1").value = "start";

}

function start1(){// 开始/继续

flag = setInterval("timeIncrement();",10);

}

function timeIncrement(){

date = new Date();

intervals=date.getTime()-time+pre_intervals;

var a=intervals%1000/10;

var b=intervals%60000/1000;

var c=intervals%3600000/60000;

var d=intervals/3600000;

milliSeconds1.innerHTML=(a<10)?('0'+Math.floor(a)):(Math.floor(a));

seconds1.innerHTML=(b<10)?('0'+Math.floor(b)):(Math.floor(b));

minutes1.innerHTML=(c<10)?('0'+Math.floor(c)):(Math.floor(c));

hours1.innerHTML=(d<10)?('0'+Math.floor(d)):(Math.floor(d));

}

function stop1(){// 暂停/停止

date = new Date();

pre_intervals += date.getTime()-pre_time;

clearInterval(flag);

}

相关文章推荐:

html做秒表代码,利用JS实现一个可精确到10ms的秒表的制作(附代码)相关推荐

  1. 传统建材行业越来越难做,如何利用新思维一个月收款100多万?

    现今的建材市场,涌现出了大量的与时俱进的产业,但是很多建材产品还停留在10年前水准,传统的建材商们如果没有危机感,感觉不到市场的变化,感觉不到危机已经来临,很容易就会被淘汰掉. 传统建材行业越来越难做 ...

  2. 利用js创建一个简单的评分心理测试网站

      下面是我做的一个关于抑郁症的简单的心理测试网站.测试者根据问题选择选项,利用js统计得分,单击按钮显示测试得分及心理状况. HTML代码 <form name="see" ...

  3. html5弹球打砖块代码,利用JS实现抖音弹球打砖块游戏代码

    特效描述:利用JS实现 抖音弹球 打砖块 游戏代码.利用JS实现抖音弹球打砖块游戏代码 代码结构 1. HTML代码 0分 总分:74 确定 /* javascript中严格区分大小写 a!==A; ...

  4. html页面点击小图弹出大图代码,利用JS实现点击小图弹出大图代码

    特效描述:利用JS实现 点击小图 弹出大图代码.利用JS实现点击小图弹出大图代码 代码结构 1. HTML代码 (function(){ var LightBox = function(options ...

  5. 太极图php代码,利用css画一个太极图(阴阳八卦)实例

    这篇文章介绍利用css画一个太极图(阴阳八卦)实例 #yin-yang { width: 96px; height: 48px; background: #eee; border-color: red ...

  6. 骑马与砍杀python代码_GitHub - yunwei1237/scottish-fold: 一个关于骑马与砍杀的剧本制作工具...

    scottish-fold 一个关于骑马与砍杀的剧本简单快速的制作工具 前言 ​在很久以前的时候,也就是刚开始玩骑砍的时候就想着能够制作一个自己的剧本,用于书写自己想要的故事.当我怀着远大的梦想去这么 ...

  7. 用HTML和CSS3做个鱼,如何使用CSS和D3实现小鱼游动的交互动画(附代码)

    本篇文章给大家带来的内容是关于如何使用CSS和D3实现小鱼游动的交互动画(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://github. ...

  8. python做excel多表按列合并_python如何实现excel多表合并(附代码)_后端开发

    php504错误怎么解决_后端开发 php504错误的解决方法:1.增加fastcgi进程响应的缓冲区大小:2.更改php环境配置,增加php-cgi进程处理脚本的超时时间:3.将php-fpm的处理 ...

  9. html鱼动画游戏代码,如何使用CSS和D3实现小鱼游动的交互动画(附代码)

    本篇文章给大家带来的内容是关于如何使用CSS和D3实现小鱼游动的交互动画(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://github. ...

最新文章

  1. gossip 区块链_比特币奇葩8问:为何区块620826比区块620825早1秒诞生?
  2. 【转载】C#编码标准━━项目设置和项目结构
  3. Webkit 最新 Javascript 引擎领先 Chrome
  4. node.js中对 mysql 进行增删改查等操作和async,await处理
  5. 目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)
  6. 亚马逊记AWS(Amazon Web Services)自由EC2应用
  7. 《Python 数据分析》笔记——pandas
  8. 保存点云数据_3D点云配准(二多幅点云配准)
  9. Windows网络服务---DHCP服务
  10. Dalsa线扫相机SDK下载和安装
  11. Python MySQL 教程
  12. CCNA自学教材推荐(转)
  13. Fisker大师用ZBrush制作兽人萨尔全过程
  14. HTC V版M7解锁刷机笔记
  15. 腾讯即将发布区块链游戏,网友大呼求别再养猫养狗了!
  16. element-ui表格头在分辨率较低的电脑会错乱
  17. Android SQlite基本用法
  18. 双均线策略 ------优矿学习
  19. Android 仿soul首页星球旋转,可上下左右方向旋转
  20. 我的天空计算机音乐,我的天空(Acoustic Version)

热门文章

  1. Selenium IDE的介绍
  2. 如何在你的WordPress网站上添加成本计算器
  3. oracle项目总结报告,“项目总结报告”如何写?5个方向16个关键要素:总结很全面...
  4. 基于android影院app设计与实现
  5. 电子科技大学《图论及其应用》复习总结---第二章 树
  6. Linux系统下生成证书 https证书
  7. 南京要求墓地实行一墓一价明码标价对外销售-墓地销售-公墓-墓地价格上涨
  8. CNN学习MNIST实现手写数字识别
  9. 推荐系统——冷启动问题
  10. VIAVI唯亚威光纤高分辨率多模 OTDR 测试方案