Javascript 倒计时计时器未使用clearInterval()停止

Javascript 倒计时计时器未使用clearInterval()停止,javascript,clearinterval,Javascript,Clearinterval,我有一个问题,让这个倒计时停止在零,这样时间就不会显示为负值。正在调用console.log并正常工作,但由于某些原因,clearInterval()未被调用。这快把我逼疯了,我快要戒烟了 const timerContainer=document.getElementById('timerContainer'); 常数三分钟=60*0.1//5秒用于测试 startTimer(三分钟,timerContainer); 功能启动计时器(持续时间、显示){ 让我们开始=Date.now(); 设

我有一个问题,让这个倒计时停止在零,这样时间就不会显示为负值。正在调用console.log并正常工作,但由于某些原因,
clearInterval()
未被调用。这快把我逼疯了,我快要戒烟了

const timerContainer=document.getElementById('timerContainer');
常数三分钟=60*0.1//5秒用于测试
startTimer(三分钟,timerContainer);
功能启动计时器(持续时间、显示){
让我们开始=Date.now();
设差,分,秒;
让计时器=()=>{
diff=持续时间-((Date.now()-start)/1000)| 0);
//使用按位截断浮点
最小值=(差值/60)| 0;
sec=(差异%60)| 0;
最小值=最小值<10?'0'+最小值:最小值;
秒=秒<10?'0'+秒:秒;
display.textContent=min+':'+秒;

if(diff不传递要停止的函数

将引用传递给您启动的计时器,因此,您需要确保启动计时器时,捕获对将从计时器返回的ID的引用

// Function that the timer will invoke
function callback(){
    . . .
}

// Set up and initiate a timer and capture a reference to its unique ID
var timerID  = setInterval(callback, 1000);

// When needed, cancel the timer by passing the reference to it
clearInterval(timerID);

不要传递要停止的函数

将引用传递给您启动的计时器,因此,您需要确保启动计时器时,捕获对将从计时器返回的ID的引用

// Function that the timer will invoke
function callback(){
    . . .
}

// Set up and initiate a timer and capture a reference to its unique ID
var timerID  = setInterval(callback, 1000);

// When needed, cancel the timer by passing the reference to it
clearInterval(timerID);

您没有保存设置间隔(计时器,1000)的结果;

您应该使用以下选项:

let timerId;
timer();
timerId = setInterval(timer, 1000);

function stopTimer() {
    clearInterval(timerId);
    console.log("time's up", diff)
};

正如您可能看到的,
setInterval
的结果是一个数字(节点中的对象),然后您需要做的就是将该值传递给
clearInterval
,因此我们将该值保存在变量
timerId
中以供参考。

您没有保存
setInterval(timer,1000);

您应该使用以下选项:

let timerId;
timer();
timerId = setInterval(timer, 1000);

function stopTimer() {
    clearInterval(timerId);
    console.log("time's up", diff)
};

正如您可能看到的,
setInterval
的结果是一个数字(节点中的对象),然后您需要做的就是将该值传递给
clearInterval
,因此我们将该值保存在变量
timerId
中以供参考。

代码已修复请确保您修复了提交按钮代码。 您应该首先将setInterval的值赋给一个变量。该变量在调用clearInterval时使用,clearInterval实际上会清除该间隔

const timerContainer = document.getElementById('timerContainer');   

const THREEMINUTES = 60 * 0.1;//5 seconds for testing

startTimer(THREEMINUTES, timerContainer);
var timer = null;
function startTimer(duration, display) {

        let start = Date.now();
        let diff, min, sec;

        let timer = () => {
            diff = duration - (((Date.now() - start) /        1000) | 0);
            //use bitwise to truncate the float
            min = (diff / 60) | 0;
            sec = (diff % 60) | 0;

            min = min < 10 ? '0' + min : min;
            sec = sec < 10 ? '0' + sec : sec;

            display.textContent = min + ':' + sec;

            if (diff <= 0) {
                stopTimer();
                submit.disabled = 'true'; 
            };

        };

        //call timer immediately otherwise we wait a      full second
        timer();
        timer = setInterval(timer, 1000);

        function stopTimer() {
            clearInterval(timer);
        console.log("time's up", diff);
    };
}
const timerContainer=document.getElementById('timerContainer');
const 3min=60*0.1;//5秒测试
startTimer(三分钟,timerContainer);
var定时器=null;
功能启动计时器(持续时间、显示){
让我们开始=Date.now();
设差,分,秒;
让计时器=()=>{
diff=持续时间-((Date.now()-start)/1000)| 0);
//使用按位截断浮点
最小值=(差值/60)| 0;
sec=(差异%60)| 0;
最小值=最小值<10?'0'+最小值:最小值;
秒=秒<10?'0'+秒:秒;
display.textContent=min+':'+秒;

如果(diff代码已修复,请确保修复提交按钮代码。 您应该首先将setInterval的值赋给一个变量。该变量在调用clearInterval时使用,clearInterval实际上会清除该间隔

const timerContainer = document.getElementById('timerContainer');   

const THREEMINUTES = 60 * 0.1;//5 seconds for testing

startTimer(THREEMINUTES, timerContainer);
var timer = null;
function startTimer(duration, display) {

        let start = Date.now();
        let diff, min, sec;

        let timer = () => {
            diff = duration - (((Date.now() - start) /        1000) | 0);
            //use bitwise to truncate the float
            min = (diff / 60) | 0;
            sec = (diff % 60) | 0;

            min = min < 10 ? '0' + min : min;
            sec = sec < 10 ? '0' + sec : sec;

            display.textContent = min + ':' + sec;

            if (diff <= 0) {
                stopTimer();
                submit.disabled = 'true'; 
            };

        };

        //call timer immediately otherwise we wait a      full second
        timer();
        timer = setInterval(timer, 1000);

        function stopTimer() {
            clearInterval(timer);
        console.log("time's up", diff);
    };
}
const timerContainer=document.getElementById('timerContainer');
常数三分钟=60*0.1;//5秒用于测试
startTimer(三分钟,timerContainer);
var定时器=null;
功能启动计时器(持续时间、显示){
让我们开始=Date.now();
设差,分,秒;
让计时器=()=>{
diff=持续时间-((Date.now()-start)/1000)| 0);
//使用按位截断浮点
最小值=(差值/60)| 0;
sec=(差异%60)| 0;
最小值=最小值<10?'0'+最小值:最小值;
秒=秒<10?'0'+秒:秒;
display.textContent=min+':'+秒;

if(diff)答案不应该只是工作代码。他们应该解释问题是什么以及你是如何解决的。你正在重置
timer
答案不应该只是工作代码。他们应该解释问题是什么以及你是如何解决的。你正在重置
timer