https://www.cnblogs.com/sandraryan/

点击开始计时,可以计次,暂停。点了暂停可以继续计时,计次,点击重置清空。

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.wrap {
width: 90%;
margin: 50px auto;
background-color: #333333;
text-align: center;
padding: 50px 0;
} .time {
margin-bottom: 50px;
} span {
color: white;
font-size: 100px;
} .control button {
width: 80px;
height: 40px;
border-radius: 7px;
border: 1px solid #333;
outline: none;
font-size: 20px;
color: white;
} .control button:nth-child(1) {
background-color: #90f62b;
} .control button:nth-child(2) {
background-color: #35b1f8;
} .control button:nth-child(3) {
background-color: #f5a123;
display: none;
} .control button:nth-child(4) {
background-color: #f75629;
display: none;
} .time span:last-child {
display: inline-block;
width: 90px;
} #show {
color: white;
font-size: 18px;
margin: 20px;
}
</style>
</head> <body>
<div class="wrap">
<div class="time">
<span>00:</span>
<span>00:</span>
<span>00:</span>
<span>000</span>
</div>
<div class="control">
<button>启动</button>
<button>复位</button>
<button>计次</button>
<button>暂停</button>
</div>
<div id="show"></div>
</div>
<script>
// 获取元素
var num = document.querySelectorAll(".time span");
var start = document.querySelectorAll(".control button")[0];
var reset = document.querySelectorAll(".control button")[1];
var times = document.querySelectorAll(".control button")[2];
var pause = document.querySelectorAll(".control button")[3];
var show = document.getElementById("show");
// 初始化时间值
var hour = 0,
minutes = 0,
seconds = 0,
ms = 0;
// 创建定时器的变量
var timer;
// 创建时间数组
var timeArr = [hour, minutes, seconds, ms]; function fun() {
// 设置定时器
timer = setInterval(function () {
// +=11 秒数最后一位数也会变化,+=10最后一位永远是0
ms += 11;
// 如果毫秒数大于0小于999,毫秒数的位置还是该毫秒数
// 否则(大于999),毫秒数的位置替换为000,毫秒数重置为0,分钟++
if (ms > 0 && ms < 999) {
num[3].innerHTML = ms;
} else {
num[3].innerHTML = '000';
ms = 0;
seconds++;
}
// 如果秒数大于0并小于59
if (seconds > 0 && seconds < 59) {
// 如果秒数小于10,秒数写为0和当前秒数(01-09)
if (seconds < 10) {
num[2].innerHTML = '0' + seconds + ':';
} else {
// 秒数大于10,秒数为当前值
num[2].innerHTML = seconds + ':';
}
} else {
// 秒数超过59,重置为0,分钟++,秒数位置变成00
seconds = 0;
minutes++;
num[2].innerHTML = "00" + ':';
} if (seconds > 59) {
// 如果秒数大于59,且分钟小于10,补0,分钟大于10,显示
if (minutes < 10) {
num[1].innerHTML = '0' + minutes + ':';
} else {
num[1].innerHTML = minutes + ':';
}
// 秒数大于59,分钟++ 显示分钟数
minutes++;
num[1].innerHTML = minutes + ':';
// 如果秒数小于59,显示00分钟
// 分钟变成0,小时++
} else {
num[1].innerHTML = '00' + ':';
minutes = 0;
hour++;
} // 如果,分钟数大于59,进入外层条件
if (minutes > 59) {
// 如果小时小于10,小时处的内容为补0 + 小时数
if (hour < 10) {
num[0].innerHTML = '0' + hour + ':';
} else {
num[0].innerHTML = hour + ':';
}
}
}, 10);
}
// 封装一个函数
// t作为计数器,作为每一条时间的序列号
var t = 0; function counter() {
// 用abcd获取num数组的各个下标的值
var a = num[0].innerHTML;
var b = num[1].innerHTML;
var c = num[2].innerHTML;
var d = num[3].innerHTML;
// 函数调用,计时器++(d点一次加一条)
t++;
// 创建一个p元素,追加给展示区(展示每一条事件列表)
var n = document.createElement('p');
n.innerHTML = t + '.' + a + b + c + d;
show.appendChild(n);
}
// 清除定时器
function clear() {
clearInterval(timer);
} // 重置函数
function over() {
// 清楚定时器
clearInterval(timer);
// 把时间重置
hour = 0;
seconds = 0;
minutes = 0;
ms = 0;
// 页面元素赋值重置
num[0].innerHTML = '0' + hour + ':';
num[1].innerText = '0' + minutes + ' : ';
num[2].innerText = '0' + seconds + ' . ';
num[3].innerText = '00' + ms;
} // 开始按钮注册点击时间,隐藏开始重置按钮,计时暂停按钮出现
// 调用函数开始运行整个计时器
start.onclick = function () {
start.style.display = "none";
reset.style.display = "none";
times.style.display = "inline-block";
pause.style.display = "inline-block";
fun();
}
// 点击停止按钮,隐藏停止计次按钮,开始重置按钮出现
pause.onclick = function () {
pause.style.display = "none";
times.style.display = "none";
start.style.display = "inline-block";
reset.style.display = "inline-block";
clear();
} // 点击计次按钮,在展示区防放置当前时间值
times.onclick = function () {
counter();
}
// 点击重置按钮,重置页面元素,重置时间,清空页面内容
reset.onclick = function () {
over();
show.innerHTML = '';
}
</script>
</body> </html>

that‘s all ~~~

原生js实现计时器的更多相关文章

  1. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

  2. 原生JS实现"旋转木马"效果的图片轮播插件

    一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...

  3. 原生js实现轮播图

    原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...

  4. 原生JS实现简易转盘抽奖

    我爱撸码,撸码使我感到快乐. 大家好,我是Counter. 本章带大家来简单的了解下原生JS实现转盘抽奖. 因为主要涉及到JS,在这里HTML和CSS起到的功能就没有那么重要, 因此,没有过多的阐述H ...

  5. 前端跨域问题相关知识详解(原生js和jquery两种方法实现jsonp跨域)

    1.同源策略 同源策略(Same origin policy),它是由Netscape提出的一个著名的安全策略.同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正 ...

  6. 使用原生JS封装一个动画函数

    最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...

  7. javascript原生js轮播图

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 常用原生JS方法总结(兼容性写法)

    经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...

  9. 再谈React.js实现原生js拖拽效果

    前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...

随机推荐

  1. 基于pytest的接口测试

    最近要开展接口测试,起初打算使用公司已有的Fitnesse测试工具来进行接口测试.过程中发现,构造接口字段数据.测试数据都比较困难,接口参数多的时候,用例量就会很多,关键执行速度还慢.所以放弃了. 找 ...

  2. node的源码安装

    Node.js 安装配置 本章节我们将向大家介绍在 Windows 和 Linux 上安装 Node.js 的方法. 本安装教程以 Node.js v4.4.3 LTS(长期支持版本)版本为例. No ...

  3. bzoj 2705 [SDOI2012]Longge的问题——欧拉函数大水题

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2705 撕逼题.不就是枚举gcd==d,求和phi[ n/d ]么. 然后预处理sqrt (n ...

  4. 初次接触python的re模块

    刷CF的时候,看到一个简单的题目,可以用来练练正则表达式 于是乎找到了re.sub的用法,说明如下 re.sub: (pattern, repl, string, count=0, │       f ...

  5. Matlab 稀疏矩阵函数

    eye 单位矩阵zeros 全零矩阵ones 全1矩阵rand 均匀分布随机阵genmarkov 生成随机Markov矩阵linspace 线性等分向量logspace 对数等分向量logm 矩阵对数 ...

  6. Directx11教程(67) 显示模型文件

    原文:Directx11教程(67) 显示模型文件       在前面的教程中,我们都是通过在ModelClass中直接产生顶点和索引数据,简单的三角形,立方体等等还好说,毕竟比较简单,如何显示复杂的 ...

  7. “获取access_token”接口新增IP白名单保护

  8. oracle管理索引

    索引是用于加速数据存取的数据对象,合理的使用索引可以大大降低I/O次数,从而提高数据访问性能.索引有很多种我们主要介绍常用的几种: 为什么添加了索引或,会加快查询速度呢? n  单列索引 单列索引是基 ...

  9. jQuery之父:坚持每天都要写代码

    关于作者:John Resig, jQuery之父,同时也是Pro Javascript Techniques和Secrets of the JavaScript Ninja的作者.他目前主持 Kha ...

  10. (译)Objective-C的动态特性

    这是一篇译文,原文在此,上一篇文章就是受这篇文章启发,这次干脆都翻译过来. 过去的几年中涌现了大量的Objective-C开发者.有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型 ...