html做秒表代码,利用JS实现一个可精确到10ms的秒表的制作(附代码)
本篇文章给大家带来的内容是关于利用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的秒表的制作(附代码)相关推荐
- 传统建材行业越来越难做,如何利用新思维一个月收款100多万?
现今的建材市场,涌现出了大量的与时俱进的产业,但是很多建材产品还停留在10年前水准,传统的建材商们如果没有危机感,感觉不到市场的变化,感觉不到危机已经来临,很容易就会被淘汰掉. 传统建材行业越来越难做 ...
- 利用js创建一个简单的评分心理测试网站
下面是我做的一个关于抑郁症的简单的心理测试网站.测试者根据问题选择选项,利用js统计得分,单击按钮显示测试得分及心理状况. HTML代码 <form name="see" ...
- html5弹球打砖块代码,利用JS实现抖音弹球打砖块游戏代码
特效描述:利用JS实现 抖音弹球 打砖块 游戏代码.利用JS实现抖音弹球打砖块游戏代码 代码结构 1. HTML代码 0分 总分:74 确定 /* javascript中严格区分大小写 a!==A; ...
- html页面点击小图弹出大图代码,利用JS实现点击小图弹出大图代码
特效描述:利用JS实现 点击小图 弹出大图代码.利用JS实现点击小图弹出大图代码 代码结构 1. HTML代码 (function(){ var LightBox = function(options ...
- 太极图php代码,利用css画一个太极图(阴阳八卦)实例
这篇文章介绍利用css画一个太极图(阴阳八卦)实例 #yin-yang { width: 96px; height: 48px; background: #eee; border-color: red ...
- 骑马与砍杀python代码_GitHub - yunwei1237/scottish-fold: 一个关于骑马与砍杀的剧本制作工具...
scottish-fold 一个关于骑马与砍杀的剧本简单快速的制作工具 前言 在很久以前的时候,也就是刚开始玩骑砍的时候就想着能够制作一个自己的剧本,用于书写自己想要的故事.当我怀着远大的梦想去这么 ...
- 用HTML和CSS3做个鱼,如何使用CSS和D3实现小鱼游动的交互动画(附代码)
本篇文章给大家带来的内容是关于如何使用CSS和D3实现小鱼游动的交互动画(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://github. ...
- python做excel多表按列合并_python如何实现excel多表合并(附代码)_后端开发
php504错误怎么解决_后端开发 php504错误的解决方法:1.增加fastcgi进程响应的缓冲区大小:2.更改php环境配置,增加php-cgi进程处理脚本的超时时间:3.将php-fpm的处理 ...
- html鱼动画游戏代码,如何使用CSS和D3实现小鱼游动的交互动画(附代码)
本篇文章给大家带来的内容是关于如何使用CSS和D3实现小鱼游动的交互动画(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://github. ...
最新文章
- gossip 区块链_比特币奇葩8问:为何区块620826比区块620825早1秒诞生?
- 【转载】C#编码标准━━项目设置和项目结构
- Webkit 最新 Javascript 引擎领先 Chrome
- node.js中对 mysql 进行增删改查等操作和async,await处理
- 目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)
- 亚马逊记AWS(Amazon Web Services)自由EC2应用
- 《Python 数据分析》笔记——pandas
- 保存点云数据_3D点云配准(二多幅点云配准)
- Windows网络服务---DHCP服务
- Dalsa线扫相机SDK下载和安装
- Python MySQL 教程
- CCNA自学教材推荐(转)
- Fisker大师用ZBrush制作兽人萨尔全过程
- HTC V版M7解锁刷机笔记
- 腾讯即将发布区块链游戏,网友大呼求别再养猫养狗了!
- element-ui表格头在分辨率较低的电脑会错乱
- Android SQlite基本用法
- 双均线策略 ------优矿学习
- Android 仿soul首页星球旋转,可上下左右方向旋转
- 我的天空计算机音乐,我的天空(Acoustic Version)