原生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整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
使用时间戳解决ie缓存的问题
Aug 20 Javascript
JavaScript中window.open用法实例详解
Apr 15 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
Aug 28 Javascript
javascript判断复选框是否选中的方法
Oct 16 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
Aug 25 Javascript
Javascript 动态改变imput type属性
Nov 01 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
Jan 13 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
spring+angular实现导出excel的实现代码
Feb 27 Javascript
JavaScript闭包原理与用法学习笔记
May 29 Javascript
vue常用高阶函数及综合实例
Feb 25 Vue.js
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
多重?l件?合查?(二)
2006/10/09 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
php之可变函数的实例详解
2017/09/13 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
javascript 限制输入脚本大全
2009/11/03 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
python函数的万能参数传参详解
2019/07/26 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
python支持多线程的爬虫实例
2019/12/21 Python
Python新手如何理解循环加载模块
2020/05/29 Python
前端实现打印图像功能
2019/08/27 HTML / CSS
财务会计应届生求职信
2013/11/24 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
社区志愿者活动方案
2014/08/18 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
质量保证书格式模板
2015/02/27 职场文书
详解Python函数print用法
2021/06/18 Python
Go 内联优化让程序员爱不释手
2022/06/21 Golang