我在我的项目中使用计时器,我遇到了两个问题。按下开始按钮的时候应该开始&当结束按钮按下时应该结束。
但是1)点击结束按钮时
时间不停
2)当时间减少&达到1分钟..时间停止..也应该在几秒内减少
var tim;
var min = 10;
var sec = 10;
var f = new Date();
function f1() {
f2();
document.getElementById("starttime").innerHTML = "Your started your Exam at " + f.getHours() + ":" + f.getMinutes();
}
function f2() {
if (parseInt(sec) > 0) {
sec = parseInt(sec) - 1;
document.getElementById("showtime").innerHTML = "Your Left Time is :" + min + " Minutes ," + sec + " Seconds";
tim = setTimeout("f2()", 1000);
} else {
if (parseInt(sec) == 0) {
min = parseInt(min) - 1;
if (parseInt(min) == 0) {
clearTimeout(tim);
location.href = ".././Home/Login";
} else {
sec = 60;
document.getElementById("showtime").innerHTML = "Your Left Time is :" + min + " Minutes ," + sec + " Seconds";
tim = setTimeout("f2()", 1000);
}
}
}
}
答案 0 :(得分:1)
我的建议是:
<强> Fiddle 强>
var tim;
var sec;
var f = new Date();
function f1() {
sec = 10 * 60;
f2();
document.getElementById("starttime").innerHTML = "Your started your Exam at " + f.getHours() + ":" + f.getMinutes();
}
function f2() {
if (sec > 0) {
sec--;
tim = setTimeout(f2, 1000);
} else {
document.getElementById("starttime").innerHTML = "times up!!!!";
}
var min = Math.floor(sec / 60);
var secDisplay = sec % 60;
document.getElementById("showtime").innerHTML = "Your Left Time is : " + min + " Minutes," + secDisplay + " Seconds";
}
function end() {
clearTimeout(tim);
sec = 0;
f2();
}
变更是:
删除了min
变量,仅使用总秒数而不是两个变量。为了显示目的,我们可以根据总秒数轻松计算分钟数。使用seconds变量可以更轻松地检查剩余时间。正如您所看到的,代码经过了简化。
更改了setTimeout,将该函数作为参数,而不是字符串。
添加end()
功能,在点击结束按钮时调用。
将秒数移至f1()
内,以便在不重新加载页面的情况下重复启动和结束。
删除了不必要的parseInt()
电话。 sec变量已经是数字类型,因此无需转换它。
当秒数减少到0
时,计时器将停止。如果您希望在剩余时间达到一分钟时停止,只需将f2()
中的条件更改为if (sec > 60) {
答案 1 :(得分:1)
关于结束按钮的第一个问题,我看不到任何结束按钮功能。但你可以有一个停止功能来清除超时。
function f3() {
clearTimeout(tim);
//update any text you wish here or move to the next page..
}
对于你的第二个问题,为什么它在1分钟结束。在检查是否为零之前,您正在减小分钟值。因此当你来到f2时,sec为0而min为1然后你将min减少到0 ..然后检查它是否为零并结束执行。 要解决这个问题,请移动你的“min = parseInt(min) - 1;”在其他之后它也应该计算最后一分钟。
PS。因为你正在使用数字
,所以你不需要parseint