原生js实现计时器
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实现计时器的更多相关文章
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 原生JS实现"旋转木马"效果的图片轮播插件
一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...
- 原生js实现轮播图
原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...
- 原生JS实现简易转盘抽奖
我爱撸码,撸码使我感到快乐. 大家好,我是Counter. 本章带大家来简单的了解下原生JS实现转盘抽奖. 因为主要涉及到JS,在这里HTML和CSS起到的功能就没有那么重要, 因此,没有过多的阐述H ...
- 前端跨域问题相关知识详解(原生js和jquery两种方法实现jsonp跨域)
1.同源策略 同源策略(Same origin policy),它是由Netscape提出的一个著名的安全策略.同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正 ...
- 使用原生JS封装一个动画函数
最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...
- javascript原生js轮播图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 常用原生JS方法总结(兼容性写法)
经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...
- 再谈React.js实现原生js拖拽效果
前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...
随机推荐
- python中在计算机视觉中的库及基础用法
基于python脚本语开发的数字图像处理包有很多,常见的比如PIL.Pillow.opencv.scikit-image等.PIL和pillow只提供了基础的数字图像处理,功能有限:OpenCV实际上 ...
- Floyd算法模板--详解
对于无权的图来说: 若从一顶点到另一顶点存在着一条路径,则称该路径长度为该路径上所经过的边的数目,它等于该路径上的顶点数减1. 由于从一顶点到另一顶点可能存在着多条路径,每条路径上所经过的边数可能不同 ...
- Linux 配置yum源(互联网)
Linux 配置yum源(互联网) 环境:操作系统Redhat 7.5 1.卸载现有的yum源 rpm -qa|grep yum|xargs rpm -e --nodeps #移除与原yum有 ...
- StatusBar用法
一.StatusBar组件介绍 StatusBar 是 React Native 0.20 起新增的跨平台组件,它可以用来设置并动态改变设备的状态栏显示特性. StatusBar 组件可以同时加载多个 ...
- 如何在Data Lake Analytics中使用临时表
前言 Data Lake Analytics (后文简称DLA)是阿里云重磅推出的一款用于大数据分析的产品,可以对存储在OSS,OTS上的数据进行查询分析.相较于传统的数据分析产品,用户无需将数据重新 ...
- 阿里云MVP:开发者的超能力,用技术创造更好世界
阿里云MVP:开发者的超能力,用技术创造更好世界 2019年3月,第8期阿里云MVP(最有价值专家)完成终审,截至目前,全球已有27个国家和地区.近500位云计算专家和优秀开发者成为阿里云MVP.阿里 ...
- Servlet小结(转载)
http://www.iteye.com/topic/766418 1 .首先,什么是Servlet? Servlet是一个Java编写的程序,此程序是在服务器端运行的,是按照Servl ...
- MongoDB负载信息一目了然 阿里云HDM重磅发布MongoDB监控和诊断功能
混合云数据库管理(HDM)的统一监控.告警.诊断功能新增了对MongoDB的支持. 通过直观的方式将MongoDB多个维度的负载信息统一整合,不仅可以清晰的查看实时负载信息,也可以方便的确认历史负载情 ...
- Linux使用注意事项
1.Linux严格区分大小写 2.Linux中所有内容以文件形式保存,包括硬件 3.修改任何设置,若想永久生效,都需要修改配置文件(除非某些发现版已经默认设置为同时修改内存和硬盘数据). 4.Linu ...
- docker在windows下的安装
Docker for Windows会默认包含两个引擎containers(linux和windows) 1. 下载Docker for Windows,https://docs.docker.com ...