原生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 相关文章推荐
通过JS 获取Mouse Position(鼠标坐标)的代码
Sep 21 Javascript
javascript 广告后加载,加载完页面再加载广告
Nov 25 Javascript
基于jquery的一个拖拽到指定区域内的效果
Sep 21 Javascript
js+xml生成级联下拉框代码
Jul 24 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
Jul 07 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
Oct 08 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
jQuery模仿单选按钮选中效果
Jun 24 Javascript
angularjs实现首页轮播图效果
Apr 14 Javascript
利用HBuilder打包前端开发webapp为apk的方法
Nov 13 Javascript
JavaScript语法约定和程序调试原理解析
Nov 03 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控制网页过期时间的代码
2008/09/28 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
php获取文件大小的方法
2014/02/26 PHP
php实现文件编码批量转换
2014/03/10 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
解决python 找不到module的问题
2020/02/12 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
小班重阳节活动方案
2014/02/08 职场文书
会计工作岗位职责
2015/02/03 职场文书
汽车车尾标语大全
2015/08/11 职场文书
python中的被动信息搜集
2021/04/29 Python
react 项目中引入图片的几种方式
2021/06/02 Javascript
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
Spring Boot 实现 WebSocket
2022/04/30 Java/Android
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers