javascript中的计时器控件

时间:2013-07-05 06:57:35

标签: javascript html settimeout

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


            }
        }

    }
}

2 个答案:

答案 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