0
function countdown(element, minutes, seconds) {
    // set time for the particular countdown
    var time = minutes*60 + seconds;
    var interval = setInterval(function() {
        var el = document.getElementById(element);
        // if the time is 0 then end the counter

        if(time == 0) {
            //el.innerHTML = "countdown's over!";
         // document.getElementById("timer").style.visibility="hidden";
            clearInterval(interval);
            return;
        }
        var hour=Math.floor( time / (60*60) );
        if (hour < 10) hour = "0" + hour;
        var minutes = 0;
        if(time>=60 && hour>0)
            minutes=Math.floor( (time / 60 )-60);
        else{
            minutes=Math.floor( (time / 60 ));
        }
        if (minutes < 10) minutes = "0" + minutes;
        var seconds = time % 60;
        if (seconds < 10) seconds = "0" + seconds; 
      //  var text = hour+":"+minutes; //+ ':' + seconds;
        var text = minutes; //+ ':' + seconds;

        el.innerHTML = text;
        time--;
    }, 1000);
}

当我调用方法 2wice 时,它​​会产生闪烁效果。即countdown(element, 50, 0); 它倒计时,但如果我再次调用它,即countdown(element, 35, 0);它是显示两个倒计时的电影

4

2 回答 2

0

如果要在同一个元素上调用插件,则需要在插件初始化时取消间隔。否则,您一次运行两个间隔。

我建议从您的函数中返回间隔,并允许自己将该间隔作为参数传递。这样你就可以在开始之前取消间隔(如果已经有一个)。如果你传递null了间隔变量,你仍然可以运行clearInterval()而不会抛出错误。

例如:

function countdown(element, minutes, seconds, interval) {
    // set time for the particular countdown
    var time = minutes*60 + seconds;
    clearInterval(interval);
    return setInterval(function() {
...

您的第一个电话可能是:

var savedInterval = countdown('some-ele-id', 1, 1, null);

你的第二个电话可能是:

var interval = countdown('some-ele-id', 1, 1, savedInterval);

另一种解决方案是将间隔保存为全局变量并取消它而不将其作为参数传递到插件中。

于 2013-10-23T17:47:06.440 回答
0

避免修改代码的替代方法是:

var interval;
...
function countdown(element, minutes, seconds) {
    // set time for the particular countdown
    var time = minutes*60 + seconds;
    interval = setInterval(function() {
...

在您的第二次通话中:

clearInterval(interval);
countdown(element, 35, 0);
于 2013-10-23T17:54:28.787 回答