亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

停止setTImeout()函數刷新倒計時

停止setTImeout()函數刷新倒計時

森欄 2023-08-18 17:11:58
我有一個 javascript 倒計時功能,運行良好。但我不知道如何停止并刷新計時器以延長時間。當我在超時之前再次調用這個函數時,它的工作方式非常奇怪。它顯示了兩個倒計時時間,因為 updateTimer() 函數仍在工作。于是我上網查了一下,發現clearTimeout()函數可以停止這個倒計時。但我不知道如何應用這個功能。請幫助我停止并刷新這個計時器。function countdown(elementName, minutes, seconds) {    var element, endTime, hours, mins, msLeft, time;    function twoDigits(n) {        return (n <= 9 ? "0" + n : n);    }    function updateTimer() {        msLeft = endTime - (+new Date);        if (msLeft < 1000) {            element.innerHTML = "00:00";        } else {            time = new Date(msLeft);            hours = time.getUTCHours();            mins = time.getUTCMinutes();            element.innerHTML = twoDigits(time.getUTCMinutes()) + ':' + twoDigits(time.getUTCSeconds());            setTimeout(updateTimer, time.getUTCMilliseconds() + 500);        }    }    element = document.getElementById(elementName);    endTime = (+new Date) + 1000 * (60 * minutes + seconds) + 500;    updateTimer();    return stopTimer();}countdown("countdown", 0, 30);
查看完整描述

2 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

您需要將您的存儲setTimeout()在變量中。匿名超時無法清除。


var timeout;


function countdown(elementName, minutes, seconds) {

    var element, endTime, hours, mins, msLeft, time;



    function twoDigits(n) {

        return (n <= 9 ? "0" + n : n);

    }


    function updateTimer() {

        msLeft = endTime - (+new Date);

        if (msLeft < 1000) {

            element.innerHTML = "00:00";

        } else {

            time = new Date(msLeft);

            hours = time.getUTCHours();

            mins = time.getUTCMinutes();

            element.innerHTML = twoDigits(time.getUTCMinutes()) + ':' + twoDigits(time.getUTCSeconds());

            timeout = setTimeout(updateTimer, time.getUTCMilliseconds() + 500);

        }

    }


    element = document.getElementById(elementName);

    endTime = (+new Date) + 1000 * (60 * minutes + seconds) + 500;

    updateTimer();


    stopTimer();

}


function stopTimer() {

  clearTimeout(timeout);

}


countdown("countdown", 0, 30);


查看完整回答
反對 回復 2023-08-18
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

您需要設置一個全局變量等于 的返回值setTimeout(...),然后將該全局變量傳遞給clearTimeout()func。

就是這樣:


let tm;



function countdown(elementName, minutes, seconds) {

    var element, endTime, hours, mins, msLeft, time;

    



    function twoDigits(n) {

        return (n <= 9 ? "0" + n : n);

    }


    function stopTimer(t) {

        return clearTimeout(t);

    }


    function updateTimer() {

        msLeft = endTime - (+new Date);

        if (msLeft < 1000) {

            element.innerHTML = "00:00";

        } else {

            time = new Date(msLeft);

            hours = time.getUTCHours();

            mins = time.getUTCMinutes();

            element.innerHTML = twoDigits(time.getUTCMinutes()) + ':' + twoDigits(time.getUTCSeconds());

            tm = setTimeout(updateTimer, time.getUTCMilliseconds() + 500);

        }

    }


    element = document.getElementById(elementName);

    endTime = (+new Date) + 1000 * (60 * minutes + seconds) + 500;

    updateTimer();


    return stopTimer(tm);

}


countdown("countdown", 0, 30);


查看完整回答
反對 回復 2023-08-18
  • 2 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號