2

我在我的项目中使用计时器,我有两个问题。当开始按钮按下时间应该开始&当结束按钮按下时间应该结束。
但是 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);


            }
        }

    }
}
4

2 回答 2

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;” 在 else 之后,它也应该算到最后一分钟。

PS。你不需要 parseint 因为你已经在使用数字了

于 2013-07-05T07:24:47.790 回答
1

我的建议是这样的:

小提琴

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) {

于 2013-07-05T07:15:27.633 回答