javascript实现计时器的简单方法


Posted in Javascript onFebruary 21, 2016

计时器, 在生活当中也是用得频繁的功能, 比如锻炼身体, 跑步比赛等等相关的活动. 我们用Javascript来完成一个计时器.

计时器, 主要就是对时间的一个逻辑处理, 比如60秒等于1分钟, 60分钟等于一个小时, 我们这里只做到小时的处理. 就这么一个简单的逻辑, 然后动态的显示在一个Input里面.

javascript实现计时器的简单方法

那现在我们来完成这个界面

<label>计时:</label> 
<input type="text" name="" id="timer"/> 
<button onclick="pause(this)" id="pause" state="on">暂停</button>
<button onclick="restart()">重新开始</button>

给标签元素一个ID是为了获取其中的标签, 然后加入了两个点击事件, 计数器的暂停, 和重新开始事件.

首先我们来完成开始计时的处理, 开始计时主要还是是用了setInterval的方法, 其中每隔1秒执行一次方法, 这样我们就可以对时间做处理, 就像开头所说60秒等于1分钟..., 所以这里就需要用判断来处理, 最后就将其中的得到的秒,分,时显示到输入框里.

var ele_timer = document.getElementById("timer");
var n_sec = 0; //秒
var n_min = 0; //分
var n_hour = 0; //时

//60秒 === 1分
//60分 === 1小时
function timer() {
 return setInterval(function () {

 var str_sec = n_sec;
 var str_min = n_min;
 var str_hour = n_hour;
 if ( n_sec < 10) {
  str_sec = "0" + n_sec;
 }
 if ( n_min < 10 ) {
  str_min = "0" + n_min;
 }

 if ( n_hour < 10 ) {
  str_hour = "0" + n_hour;
 }

 var time = str_hour + ":" + str_min + ":" + str_sec;
 ele_timer.value = time;
 n_sec++;
 if (n_sec > 59){
  n_sec = 0;
  n_min++;
 }
 if (n_min > 59) {
  n_sec = 0;
  n_hour++;
 }


 }, 1000);
}

var n_timer = timer();

我们用timer方法包装setInterval方法是为了,后面暂停和重新开始做处理.
用户点击了暂停, 计时器就停止计时, 用户继续点击这个按钮, 计时器继续计时. 所以这里有一个状态需要控制,这个状态我们给这个按钮一个属性.

//暂停和继续
function pause(self) {
 var state = self.getAttribute("state");
 if (state === "on") {
  clearInterval(n_timer);
  self.textContent = "继续";
  self.setAttribute("state", "off");
 } else {
  n_timer = timer();
  self.textContent = "暂停";
  self.setAttribute("state", "on");
 }
}

最后我们来看一下重新开始, 重新开始事件就更加简单了. 将计数器清0, 然后改变暂停按钮初始状态.

function restart() {
 clearInterval(n_timer);
 n_sec = 0;
 n_min = 0;
 n_hour = 0;
 n_timer = timer();

 var ele_pause = document.getElementById("pause");
 ele_pause.textContent = "暂停";
 ele_pause.setAttribute("state", "on");
}

这样就完成了计时的功能.效果如下

javascript实现计时器的简单方法

希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
JS常用字符串处理方法应用总结
May 22 Javascript
JavaScript中的alert()函数使用技巧详解
Dec 29 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
Feb 17 Javascript
JavaScript日期类型的一些用法介绍
Mar 02 Javascript
js正则表达式replace替换变量方法
May 21 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
jQuery树控件zTree使用方法详解(一)
Feb 28 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
Apr 01 Javascript
基于DOM节点删除之empty和remove的区别(详解)
Sep 11 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
Sep 14 Javascript
如何为你的JS项目添加智能提示与类型检查详解
Mar 12 Javascript
微信小程序返回箭头跳转到指定页面实例解析
Oct 08 Javascript
JS中Eval解析JSON字符串的一个小问题
Feb 21 #Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
Feb 21 #Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
Feb 21 #Javascript
全面详细的jQuery常见开发技巧手册
Feb 21 #Javascript
完善的jquery处理机制
Feb 21 #Javascript
jquery对象和DOM对象的任意相互转换
Feb 21 #Javascript
jQuery实现div拖拽效果实例分析
Feb 20 #Javascript
You might like
一个简洁的多级别论坛
2006/10/09 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
js正则相关知识点专题
2018/05/10 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
element-ui中按需引入的实现
2019/12/25 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
python从子线程中获得返回值的方法
2019/01/30 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
《童年的发现》教学反思
2014/02/14 职场文书
监考失职检讨书
2015/01/26 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers