原生js 秒表实现代码


Posted in Javascript onJuly 24, 2012

html代码:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<meta charset="gb2312"> 
<head> 
<style type="text/css"> 
#container { 
margin:0 auto; 
margin-top:10%; 
width:200px; 
} 
#timer { 
border:red double 1px; 
width:180px; 
height:76px; 
line-height:76px; 
font-size:32pt; 
color:green; 
} 
input { 
width:87px; 
} 
</style> 
</head> 
<body onload="init()"> 
<div id="container"> 
<div id="timer"></div> 
<input type="button" id="ctrl" /> 
<input type="reset" onclick="init()" /> 
</div> 
</body> 
</html>

js代码:
/* 
*@author:hyjiacan 
*date:15:57 2010-9-5 
*name:timer 
*/ 
var ctrl = document.getElementById("ctrl"); //控制按钮对象 
var timer = document.getElementById("timer"); //时间显示对象 
var hour, minute, second; //时,分 ,钞 
var t; //setTimeout方法 
//初始化显示和按钮 
var init = function(){ 
timer.innerHTML = "00:00:00"; //由于FF不支持使用innerText,故采用innerHTML 
hour = minute = second = 0; //初始化显示 
ctrl.setAttribute("value", "开始"); //初始化控制按钮文字 
ctrl.setAttribute("onclick", "startit()"); //初始化控制按钮事件 
clearTimeout(t); 
} 
//开始计时 
function startit(){ 
t = setTimeout("startit()", 1000); //每隔1秒(1000毫秒)递归调用一次 
second++; 
if(second>=60){ //判断秒是否到60, 是则进位 
second = 0; 
minute++; 
} 
if(minute>=60){ //判断分是否到60, 是则进位 
minute = 0; 
hour++; 
} 
timer.innerHTML = j(hour) + ":" + j(minute) + ":" + j(second) ; //更新显示 
//更改按钮状态 
ctrl.setAttribute("value", "暂停/停止"); //更改按钮文字 
ctrl.setAttribute("onclick", "pause()"); //更改按钮触发事件 
} 
//显示数字填补,即当显示的值为0-9时,在前面填补0;如:1:0:4, 则填补成为 01:00:04 
var j = function(arg){ 
return arg>=10 ? arg : "0" + arg; 
} 
//暂停计时 
var pause = function(){ 
clearTimeout(t); 
ctrl.setAttribute("onclick", "startit()"); 
ctrl.setAttribute("value", "继续"); 
}

使用setTimeout递归处理。 在这之中,有一个很重要的问题——延迟,这样的做法和系统CPU资源有很大关系,而且函数的调用也要耗费时间,最终就导致计数的误差越来越大。

还有另一个方法:

在按下开始按钮的时候,记录下按下的时间(毫秒),然后每隔1秒读取一次当前时间,再用当前时间减去按下时记下的时间,算出经过了的时间。

Javascript 相关文章推荐
createElement动态创建HTML对象脚本代码
Nov 24 Javascript
js中关于new Object时传参的一些细节分析
Mar 13 Javascript
jquery怎样实现ajax联动框(二)
Mar 08 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
js 实现菜单左右滚动显示示例介绍
Nov 21 Javascript
javascript实现tab切换的两个实例
Nov 05 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
Feb 09 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 Javascript
原生JavaScript实现Tooltip浮动提示框特效
Mar 07 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
Aug 12 Javascript
TS 类型收窄教程示例详解
Sep 23 Javascript
javascript设计模式 接口介绍
Jul 24 #Javascript
javascript设计模式 封装和信息隐藏(上)
Jul 24 #Javascript
js+xml生成级联下拉框代码
Jul 24 #Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
Jul 24 #Javascript
基于jquery的跟随屏幕滚动代码
Jul 24 #Javascript
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 #Javascript
基于jquery自定义图片热区效果
Jul 21 #Javascript
You might like
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
python使用KNN算法识别手写数字
2019/04/25 Python
python解释器spython使用及原理解析
2019/08/24 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
详解python datetime模块
2020/08/17 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
腾讯广告词
2014/03/19 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
业务员管理制度范本
2015/08/06 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫
Go语言怎么使用变长参数函数
2022/07/15 Golang