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

同じ要素でプラグインを呼び出す場合は、プラグインの初期化時に間隔をキャンセルする必要があります。そうしないと、一度に 2 つのインターバルを実行していることになります。

関数から間隔を返し、その間隔をパラメーターとして渡すことをお勧めします。そうすれば、開始する前にいつでもインターバルをキャンセルできます (すでに開始している場合)。interval varを渡した場合でも、エラーをスローすることなく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);

2 番目の呼び出しは次のようになります。

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

そしてあなたの2番目の呼び出しで:

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