1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
  6. <title>stop watch</title>
  7. <!--by 0o晓月メ http://www.cnblogs.com/final-elysion/p/6066358.html -->
  8. <script type="text/javascript">
  9. //起始计时时间
  10. var totalStartTime = null;
  11. var countStartTime = null;
  12. //暂停时的时间
  13. var stopCountTime = 0;
  14. var stopTotalTime = 0;
  15. //保存的计次时间列表
  16. var countList = [];
  17. //循环指针
  18. var changeTime = null;
  19. var addnewValue = false;
  20. var begin = false;
  21. //label & 缓存已经使用的时间
  22. var countTime = null;
  23. var totalTime = null;
  24. beginChange = function(){
  25. //设置标志位进行控制,避免多线程造成的变量问题
  26. begin = true;
  27. changeTime = setInterval(changeStopWatch,10);
  28. document.getElementById('begin').disabled = true;
  29. document.getElementById('stop').disabled = false;
  30. document.getElementById('commit').disabled = false;
  31. document.getElementById('reset').disabled = true;
  32. }
  33. /**
  34. * 计时器核心方法
  35. */
  36. changeStopWatch = function(){
  37. if(begin){
  38. totalStartTime = new Date();
  39. countStartTime = totalStartTime;
  40. begin = false;
  41. }else if(addnewValue){
  42. //重设新的起始时间 暂停的时间点
  43. countStartTime = new Date();
  44. stopCountTime = 0;
  45. addnewValue = false;
  46. }
  47. var now = new Date();
  48. var tempTotal = (now.getTime() - totalStartTime.getTime())/1000 + stopTotalTime;
  49. var tempCount = (now.getTime() - countStartTime.getTime())/1000 + stopCountTime;
  50. tempTotal = Math.floor(tempTotal * 100) / 100;
  51. tempCount = Math.floor(tempCount * 100) / 100;
  52. //多线程问题有时候会出现这情况
  53. if(tempTotal < 0 || tempCount < 0){
  54. console.log('bug')
  55. return ;
  56. }
  57. setTotalTime(tempTotal);
  58. setCountTime(tempCount);
  59. }
  60. stopChange = function(){
  61. clearInterval(changeTime);
  62. stopCountTime = countTime;
  63. stopTotalTime = totalTime;
  64. document.getElementById('begin').disabled = false;
  65. document.getElementById('stop').disabled = true;
  66. document.getElementById('commit').disabled = true;
  67. document.getElementById('reset').disabled = false;
  68. }
  69. addNewValue = function (){
  70. //缓存添加的时间
  71. var newValue = countTime;
  72. countList.push(newValue);
  73. //设置标志位进行控制,避免多线程造成的变量问题
  74. addnewValue = true;
  75. //刷新页面
  76. setNewValue(newValue);
  77. changeAverage();
  78. }
  79. changeAverage = function(){
  80. var total = 0,
  81. i = 0;
  82. for(;i<countList.length; i++){
  83. total = total +countList[i];
  84. }
  85. var result = Math.floor(total/i * 100) / 100;
  86. document.getElementById('average').innerText = secondToTime(result);
  87. document.getElementById('average-second').innerText = result;
  88. }
  89. resetStopWatch = function(){
  90. totalStartTime = 0;
  91. countStartTime = 0;
  92. stopCountTime = 0;
  93. stopTotalTime = 0;
  94. countList = [];
  95. changeTime = null;
  96. addnewValue = false;
  97. begin = false;
  98. setCountTime(0);
  99. setTotalTime(0);
  100. document.getElementById('result').innerHTML = "";
  101. document.getElementById('average').innerText = "00:00:00.00";
  102. document.getElementById('result-second').innerHTML = "";
  103. document.getElementById('average-second').innerText = "0";
  104. }
  105. function secondToTime(time) {
  106. var result = "";
  107. if (null != time && "" != time && time > 0) {
  108. //hour
  109. if (time >= 60 * 60) {
  110. result = parseInt(time / 3600);
  111. if(result< 10){
  112. result = "0" + result + ":";
  113. }else{
  114. result = result + ":"
  115. }
  116. }else{
  117. result = "00:"
  118. }
  119. //min
  120. if (time >= 60) {
  121. var tempMin = parseInt((time - parseInt(time / 3600) * 3600 )/ 60) ;
  122. if(tempMin < 10){
  123. tempMin = "0" + tempMin + ":";
  124. }else{
  125. tempMin = tempMin + ":"
  126. }
  127. result = result + tempMin;
  128. }else{
  129. result = result + "00:";
  130. }
  131. //second
  132. var timeStr = time + "";
  133. var tempSecond = parseInt(time%60);
  134. if(tempSecond < 10){
  135. tempSecond = "0" + tempSecond;
  136. }
  137. if(timeStr.indexOf(".") >= 0){
  138. tempSecond = tempSecond + timeStr.substring(timeStr.indexOf("."),timeStr.length);
  139. }
  140. result = result + tempSecond;
  141. }else{
  142. result = "00:00:00.00";
  143. }
  144. return result;
  145. }
  146. getCountTime = function(){
  147. return document.getElementById('count-Time');
  148. }
  149. setCountTime = function(value){
  150. countTime = value;
  151. document.getElementById('count-second-Time').innerText = value;
  152. document.getElementById('count-Time').innerText = secondToTime(value);
  153. }
  154. getTotalTime = function(){
  155. return document.getElementById('total-Time');
  156. }
  157. setTotalTime = function(value){
  158. totalTime = value;
  159. document.getElementById('total-Time').innerText = secondToTime(value);
  160. document.getElementById('total-second-Time').innerText = value;
  161. }
  162. setNewValue = function(value){
  163. var newNode = document.createElement("div");
  164. newNode.innerHTML = secondToTime(value);
  165. var oldNode = document.getElementById('result');
  166. oldNode.appendChild(newNode);
  167. var newNode2 = document.createElement("div");
  168. newNode2.innerHTML = value;
  169. var oldNode2 = document.getElementById('result-second');
  170. oldNode2.appendChild(newNode2);
  171. }
  172. </script>
  173. </head>
  174. <body >
  175. <div style="width: 430px;border-width: 2px;border-style: solid;padding: 10px 10px 10px 10px;">
  176. <input type="button" id ="begin" value="启动" onclick="beginChange()"/>
  177. <input type="button" id = "stop" value="停止" disabled="true" onclick="stopChange()"/>
  178. <input type="button" id = "commit" value="计次" disabled="true" onclick="addNewValue()"/>
  179. <input type="button" id = "reset" value="重置" disabled="true" onclick="resetStopWatch()"/>
  180. <br />
  181. <div style="width:200px;margin-top:10px;" >
  182. <div style="padding-top:20px;">当前次数计时</div>
  183. <div id="count-Time" >
  184. 00:00:00.00
  185. </div>
  186. <div style="padding-top:20px;">总时间计时</div>
  187. <div id="total-Time" >
  188. 00:00:00.00
  189. </div>
  190. <div style="padding-top:20px;">
  191. <div>平均值</div>
  192. <div id ="average" >00:00:00.00</div>
  193. </div>
  194. </div>
  195. <div style="width: 200px;position: absolute;left: 300px;top: 50px;" >
  196. <div style="padding-top:20px;">当前次数计时(秒)</div>
  197. <div id="count-second-Time">
  198. 0
  199. </div>
  200. <div style="padding-top:20px;">总时间计时(秒)</div>
  201. <div id="total-second-Time">
  202. 0
  203. </div>
  204. <div style="padding-top:20px;">
  205. <div>平均值(秒)</div>
  206. <div id ="average-second" >0</div>
  207. </div>
  208. </div>
  209. </div>
  210. <div style="width:200px;margin-top:21px;">
  211. 添加的次数列表
  212. <div id="result" >
  213. </div>
  214. </div>
  215. <div style="width: 200px;position: absolute;left: 300px;top:253px;">
  216. 添加的次数列表(秒)
  217. <div id="result-second" >
  218. </div>
  219. </div>
  220. </body>
  221. </html>

js实现类似iphone的秒表-添加平均数功能的更多相关文章

  1. JS为Select下拉框添加输入功能

    JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于se ...

  2. Expression Blend 的点滴(4)--创建类似iPhone屏幕锁控件(下)

    原文:Expression Blend 的点滴(4)--创建类似iPhone屏幕锁控件(下) 接着上篇... 接下去,将一步步演示如果创建当点击checkBox后,其中的按钮由左边滑动到右边,表示处于 ...

  3. (vue.js)axios interceptors 拦截器中添加headers 属性

    (vue.js)axios interceptors 拦截器中添加headers 属性:http://www.codes51.com/itwd/4282111.html 问题: (vue.js)axi ...

  4. WPF如何实现类似iPhone界面切换的效果(转载)

    WPF如何实现类似iPhone界面切换的效果 (version .1) 转自:http://blog.csdn.net/fallincloud/article/details/6968764 在论坛上 ...

  5. Andoird实现类似iphone AssistiveTouch的控件的demo

    类似Iphone Assistive Touch的控件的实现 网上也有些这方面的控件,不过貌似不怎么好用,或者是论坛需要积分下载,恰好自己在项目中有用到这种控件,就打算自己写一个,也成功实现了这种功能 ...

  6. JS实现为控件添加倒计时功能

    一.概述 在有些报表需求中,需要为控件添加倒计时功能,限制到某一个时间点后能进行一项操作或不能进行某项操作,比如查询,导出功能等等,又需要人性化地显示还有多少时间,即倒计时功能,比如下图中我们限制这个 ...

  7. iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图

    iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图: <!-- Safari浏览器[添加到书签] --> <link rel="sh ...

  8. 利用原生JS实现类似浏览器查找高亮功能(转载)

    利用原生JS实现类似浏览器查找高亮功能 在完成 Navify 时,增加一个类似浏览器ctrl+f查找并该高亮的功能,在此进行一点总结: 需求 在.content中有许多.box,需要在.box中找出搜 ...

  9. js实现类似页面广告一段时间自动打开一段时间自动关闭的功能

    js实现类似页面广告一段时间自动打开一段时间自动关闭的功能 一.总结 Window 对象的 open()方法:window.open('测试页面.html','news','height=300,wi ...

随机推荐

  1. VR的发展历程-VR全景智慧城市

    从1962年有第一台VR开始,到2014年Oculus被Facebook收购为止,VR经历了一个非常漫长的过程.从鲜为人知,到被广泛认识,逐渐走进我们生活.这就是VR形成的时代.在这个时代里,VR设备 ...

  2. 在JLabel上显示图片,并且图片自适应JLabel的大小

    本文转载地址:       http://blog.csdn.net/xiaoliangmeiny/article/details/7060250 在写<Core Java>上的示例代码时 ...

  3. 机器学习技法课之Aggregation模型

    Courses上台湾大学林轩田老师的机器学习技法课之Aggregation 模型学习笔记. 混合(blending) 本笔记是Course上台湾大学林轩田老师的<机器学习技法课>的学习笔记 ...

  4. Oracle listener服务启动后又停止的解决方案

    这是Oracle监听服务.忘了说我的版本是Oracle10g. 我装完Oracle数据库之后,然后用第三方工具plsql去连接,提示no listener,首先我反复检查tnsnames.ora配置文 ...

  5. 编写原生的Node.js模块

    导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  6. SQL SERVER大话存储结构(4)_复合索引与包含索引

              索引这块从存储结构来分,有2大类,聚集索引和非聚集索引,而非聚集索引在堆表或者在聚集索引表都会对其 键值有所影响,这块可以详细查看本系列第二篇文章:SQL SERVER大话存储结构 ...

  7. #417 Div2 B

    #417 Div2 B 题意 给定一个01矩阵表示一幢楼,左右两侧是楼梯,中间是房间,1代表那个房间开灯,0代表关灯,现在某人从1层左端楼梯开始关掉所有灯,当移动某一层时,必须关掉当前层所有灯才能移动 ...

  8. Finding Similar Users-Euclidean Distance Score

    Purpose: Finding Similar Users Method:  Euclidean Distance Score ex2.py critics={'Lisa Rose': {'Lady ...

  9. 网络编程应用:基于TCP协议【实现文件上传】--练习

    要求: 基于TCP协议实现一个向服务器端上传文件的功能 客户端代码: package Homework2; import java.io.File; import java.io.FileInputS ...

  10. 基于redis实现tomcat8及以上版本的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)

    前言: 本项目是基于jcoleman的tomcat-redis-session-manager二次开发版本 1.修改了小部分实现逻辑 2.去除对juni.jar包的依赖 3.去除无效代码和老版本tom ...