解决js实现的计时器中的bug(两种方法)

news/2024/7/19 15:36:43 标签: js, 计时器, bug, 计时器按钮, 解决计时加快

今天带来的是js中的计时器实现并解决bug,有两种方法解决bug,第一种是自我优化的,第二种是借鉴优化的。

首先来看看怎么实现计时器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>计时器的实现</title>
	</head>
	<script type="text/javascript">
		var i = 0;//定义从0开始计数
		var x;//定义用来保存定时器
		function startcount(){//计数的方法
			document.getElementById("time").value = i;
			i++;
		    x = setTimeout("startcount()",1000);//不能加var
		}
		function stopcount(){
			clearTimeout(x);
		}
	</script>
	<style type="text/css">
		input {
			font-size: 20px;
			background-color: pink;
		}
	</style>
	<body>
		<form action="#" method="post" name="myform">
			<input type="text" name="time" id="time" value="" size="40" /><br />
			<input type="button" name="start" id="start" value="开始" onclick="startcount()"/>
			<input type="button" name="stop" id="stop" value="停止" onclick="stopcount()"/>
		</form>
	</body>
</html>

现在计时器是实现了,可以我们会发现一个问题,就点击开始计时之后,可以继续点击开始,这样会使得计数变快,这是因为每次调用都叠加了自加。

那怎么解决呢?

第一种方法:通过一个变量来控制按钮的点击次数

如下:

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>从0开始</title>
	</head>
	<script type="text/javascript">
		var i = 0;//定义从0开始计数
		var x;//定义用来保存定时器
		var isstart = 1;//用来判断是否用户点击了开始
		function counttime(){//计数的方法
			document.getElementById("time").value = i;
			i++;
		    x = setTimeout("counttime()",1000);//不能加var
		}
		function startcount() {//当用户点击了开始之后,再次点击开始将无效
			if (isstart == 1) {
				isstart = 0;
				setTimeout("counttime()",1000);
			}
			
		}
		function stopcount(){
			isstart = 1;//当用户点击了停止之后,用户又可以继续点击开始
			clearTimeout(x);
		}
	</script>
	<style type="text/css">
		input {
			font-size: 20px;
			background-color: pink;
		}
	</style>

	<body>
		<form action="#" method="post" name="myform">
			<input type="text" name="time" id="time" value="" size="40" /><br />
			<input type="button" name="start" id="start" value="开始" onclick="startcount()"/>
			<input type="button" name="stop" id="stop" value="停止" onclick="stopcount()"/>
		</form>
	</body>

</html>

第二种方法:用户点击按钮之后使按钮不可用

如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<script type="text/javascript">
		var i = 0;//定义从0开始计数
		var x;//定义用来保存定时器
		function startcount(){//计数的方法
			document.getElementById("start").disabled = "disabled";
			document.getElementById("time").value = i;
			document.getElementById("stop").disabled = "";
			i++;
		    x = setTimeout("startcount()",1000);//不能加var
		}
		function stopcount(){
			document.getElementById("start").disabled = "";
			document.getElementById("stop").disabled = "disabled";
			isstart = 1;//当用户点击了停止之后,用户又可以继续点击开始
			clearTimeout(x);
		}
	</script>
	<style type="text/css">
		input {
			font-size: 20px;
			background-color: pink;
		}
	</style>
	<body>
		<form action="#" method="post" name="myform">
			<input type="text" name="time" id="time" value="" size="40" /><br />
			<input type="button" name="start" id="start" value="开始" onclick="startcount()"/>
			<input type="button" name="stop" id="stop" value="停止" onclick="stopcount()"/>
		</form>
	</body>
</html>

 


http://www.niftyadmin.cn/n/1472566.html

相关文章

图片轮播的实现(详解两种方法)

今天带来的是前端里图片轮播的实现&#xff0c;可以说&#xff0c;这两种方法都很简单&#xff0c;尤其第一种&#xff0c;只要是有点基础的应该都可以看懂&#xff0c;这也是小编花费了一定时间想到的代码较少的方式。&#xff08;图片我放在文末了&#xff09; 当然也有更复…

【9602】【b402】合并果子

Time Limit: 1 second Memory Limit: 50 MB 【问题描述】 在一个果园里&#xff0c;多多已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并&#xff0c;多多可以把两堆果子合并到一起&#xff0c;消耗的体力…

前端之下拉列表项的转移(通过一个函数传参实现)

今天带来的是js实现的下拉列表项的转移&#xff0c;其中有两个特别需要注意的地方&#xff0c;一个是在按钮中调用函数时参数的传递&#xff0c;一个是表单对象的name可不可以当作参数传递。 首先我把代码给出&#xff1a;&#xff08;直接复制就可以测试效果了&#xff09; …

大牛教你用3行HTML代码卡死一台机器

前言 学习web渗透测试等安全工作的朋友们&#xff0c;想必大部分接触的最早的就是HTML了。 其实学过html的朋友们都知道&#xff0c;html中可以插入JavaScript代码&#xff0c;而对于JavaScript代码&#xff0c;这里就不是很了解了 而这篇文章的主角儿就是JavaScript 喏&#x…

前端基础之js基础

首先要注意&#xff1a;JS不会报错&#xff0c;需要时时查看&#xff0c;尽量用补全和复制&#xff0c;避免语法和代码拼写出错。 然后要理解脚本执行原理&#xff0c;这个可以在网上找到更具体的解说&#xff0c;简单来说&#xff0c;JS的执行机制就是一个主线程 一个任务队…

java中的各种中断、终止程序的方法:

今天在写一个java小游戏的遇到了一些问题&#xff0c;就是和中断程序有关&#xff0c;结果去网上搜索有许多的错误方法&#xff0c;而且不是很规范&#xff0c;然后我就自己总结了以下方法&#xff0c;并且归好了类&#xff0c;希望能帮到你。&#xff08;亲测可用&#xff09;…

java中可变参数方法——寻找最大值

今天在看反射机制相关知识的时候&#xff0c;诞生了一个想法&#xff0c;就是调用方法时是否可以传入多个参数&#xff08;参数数量是可变的&#xff09;&#xff0c;很显然&#xff0c;使用高大上的泛型和集合我也不能够清晰的阐述明白。 于是&#xff0c;我在翻阅资料之后&a…

字符乱码 转化

decodeURIComponent(/*里卖弄为需要转换的字符*/)decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。decodeURIComponent(%E8%B6%85%E5%A4%A7%E6%88%B7%E5%9E%8B)转载于:https://www.cnblogs.com/lfqcode/p/7641324.html