как позволить моей кнопке сброса работать в моем обратном отсчете? - PullRequest
0 голосов
/ 02 марта 2020

// global setinterval timer
let countdownEnded = false;
let intervalSeconds = false;
let counter = -1; // reset  must be counter = -1

// init
(() => {
    updateDisplay(1800, 0);
    document.getElementById('millis').innerHTML = "00";

    //element.addEventListener("click", function(){ myFunction(p1, p2); }); 
})();


function start(time = 1800) {
    let startTime = Date.now();

    let inputTime =
        counter === -1
            ? document.getElementById('minutesInputField').value * 60 || time
            : counter

    intervalSeconds = setInterval(() => {
        let currentTime = Date.now() - startTime;

        if (inputTime < 1) {
            stop();
        } else {
            counter = inputTime - updateDisplay(inputTime, currentTime);
            updateMillis();
        }
    }, 1000);
}

function pause() {
    clearInterval(intervalSeconds);
    interval = undefined;
}

function reset() {
    
}

function stop() {
    let countDivElement = document.getElementById("countdown");
    countDivElement.innerHTML = 'countdown done';
    countdownEnded = true;
    clearInterval(intervalSeconds);
}

function updateDisplay(seconds, currentTime) {
    let timeIncrement = Math.floor(currentTime / 1000);
    updateTime(seconds - timeIncrement);
    return timeIncrement;
}

/**
 * @method - updatesecondsond
 * @summary - This updates the timer every seconds
 */

function updateTime(seconds) {
    let countDivElement = document.getElementById("timer");

    let minutes = Math.floor(seconds / 60);
    let remainingSeconds = seconds % 60;

    if (remainingSeconds < 10) {
        remainingSeconds = '0' + remainingSeconds;
    }

    if (minutes < 10) {
        minutes = '0' + minutes;
    }

    if (seconds > 0) {
        seconds = seconds - 1;
    } else {
        stop();
    }

    countDivElement.innerHTML = minutes + ":" + remainingSeconds + ":";
};

function updateMillis() {
    let countMillsElement = document.getElementById('millis');
    let counterMillis = 99;
    let millis = 0;

    let intervalMillis = setInterval(() => {

        if (counterMillis < 0) {
            clearInterval(intervalMillis);
            counterMillis = 99;
        } else {
            millis = counterMillis < 10 ? counterMillis + '0' : counterMillis;
        };

        countMillsElement.innerHTML = millis;
        counterMillis--;

    }, 10);

    if (countdownEnded) {
        stop();
        clearInterval(intervalMillis);
    }
};
 <div class="clock" id="model3">
    <div id="countdown">
      <span id="timer"></span><span id="millis"></span>
    </div>
  </div>
  <input type="number" id="minutesInputField" placeholder="minutes" />
  <div class="buttons">
    <button class="btn start" onclick="start()">Start</button>
    <button class="btn pause" onclick="pause()">Pause</button>
    <button class="btn reset" onclick="reset()">Reset</button>

  </div>

Я сделал обратный отсчет с помощью функций запуска, паузы и сброса. Функция запуска работает и делает паузу. Когда я нажимаю паузу, а затем запускаю, она продолжается, так что это идеально. Но если я хочу нажать «Сброс», необходимо сбросить количество минут, которое вводится в поле ввода. И если там ничего нет, потому что это по умолчанию на 30 минут, это должно быть 30 минут, когда вы нажимаете на кнопку сброса. Это моя проблема. Если кто-то может мне помочь? Спасибо!

<html>
<div class="clock" id="model3">
    <div id="countdown">
      <span id="timer"></span><span id="millis">

      </span>
    </div>
  </div>
  <input type="number" id="minutesInputField" placeholder="minutes" />
  <div class="buttons">
    <button class="btn start" onclick="start()">Start</button>
    <button class="btn pause" onclick="pause()">Pause</button>
    <button class="btn reset" onclick="reset()">Reset</button>

  </div>
  </html>




    // global setinterval timer
    let countdownEnded = false;
    let intervalSeconds = false;
    let counter = -1; // reset  must be counter = -1

    // init
    (() => {
        updateDisplay(1800, 0);
        document.getElementById('millis').innerHTML = "00";

        //element.addEventListener("click", function(){ myFunction(p1, p2); }); 
    })();

    function start(time = 1800) {
        let startTime = Date.now();

        let inputTime =
            counter === -1
                ? document.getElementById('minutesInputField').value * 60 || time
                : counter

        intervalSeconds = setInterval(() => {
            let currentTime = Date.now() - startTime;

            if (inputTime < 1) {
                stop();
            } else {
                counter = inputTime - updateDisplay(inputTime, currentTime);
                updateMillis();
            }
        }, 1000);
    }

    function pause() {
        clearInterval(intervalSeconds);
        interval = undefined;
    }

    function reset() {
        clearInterval(intervalSeconds);
        document.getElementById('minutesInputField').innerHTML;
    }

    function stop() {
        let countDivElement = document.getElementById("countdown");
        countDivElement.innerHTML = 'countdown done';
        countdownEnded = true;
        clearInterval(intervalSeconds);
    }

    function updateDisplay(seconds, currentTime) {
        let timeIncrement = Math.floor(currentTime / 1000);
        updateTime(seconds - timeIncrement);
        return timeIncrement;
    }

    /**
     * @method - updatesecondsond
     * @summary - This updates the timer every seconds
     */

    function updateTime(seconds) {
        let countDivElement = document.getElementById("timer");

        let minutes = Math.floor(seconds / 60);
        let remainingSeconds = seconds % 60;

        if (remainingSeconds < 10) {
            remainingSeconds = '0' + remainingSeconds;
        }

        if (minutes < 10) {
            minutes = '0' + minutes;
        }

        if (seconds > 0) {
            seconds = seconds - 1;
        } else {
            stop();
        }

        countDivElement.innerHTML = minutes + ":" + remainingSeconds + ":";
    };

    function updateMillis() {
        let countMillsElement = document.getElementById('millis');
        let counterMillis = 99;
        let millis = 0;

        let intervalMillis = setInterval(() => {

            if (counterMillis < 0) {
                clearInterval(intervalMillis);
                counterMillis = 99;
            } else {
                millis = counterMillis < 10 ? counterMillis + '0' : counterMillis;
            };

            countMillsElement.innerHTML = millis;
            counterMillis--;

        }, 10);

        if (countdownEnded) {
            stop();
            clearInterval(intervalMillis);
        }
    };

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Попробуйте это:

    function reset() {
        clearInterval(intervalSeconds);
        updateDisplay(document.getElementById('minutesInputField').value*60,0);
    }

или это (со значением по умолчанию):

    function reset() {
        defaultMinute = 30;
        clearInterval(intervalSeconds);
        updateDisplay((document.getElementById('minutesInputField').value || defaultMinute)*60,0);
    }

// global setinterval timer
    let countdownEnded = false;
    let intervalSeconds = false;
    let counter = -1; // reset  must be counter = -1

    // init
    (() => {
        updateDisplay(1800, 0);
        document.getElementById('millis').innerHTML = "00";

        //element.addEventListener("click", function(){ myFunction(p1, p2); }); 
    })();

    function start(time = 1800) {
        let startTime = Date.now();

        let inputTime =
            counter === -1
                ? document.getElementById('minutesInputField').value * 60 || time
                : counter

        intervalSeconds = setInterval(() => {
            let currentTime = Date.now() - startTime;

            if (inputTime < 1) {
                stop();
            } else {
                counter = inputTime - updateDisplay(inputTime, currentTime);
                updateMillis();
            }
        }, 1000);
    }

    function pause() {
        clearInterval(intervalSeconds);
        interval = undefined;
    }

    function reset() {
    defaultMinute = 30;
            clearInterval(intervalSeconds);
            updateDisplay((document.getElementById('minutesInputField').value || defaultMinute)*60,0);
        }

    function stop() {
        let countDivElement = document.getElementById("countdown");
        countDivElement.innerHTML = 'countdown done';
        countdownEnded = true;
        clearInterval(intervalSeconds);
    }

    function updateDisplay(seconds, currentTime) {
        let timeIncrement = Math.floor(currentTime / 1000);
        updateTime(seconds - timeIncrement);
        return timeIncrement;
    }

    /**
     * @method - updatesecondsond
     * @summary - This updates the timer every seconds
     */

    function updateTime(seconds) {
        let countDivElement = document.getElementById("timer");

        let minutes = Math.floor(seconds / 60);
        let remainingSeconds = seconds % 60;

        if (remainingSeconds < 10) {
            remainingSeconds = '0' + remainingSeconds;
        }

        if (minutes < 10) {
            minutes = '0' + minutes;
        }

        if (seconds > 0) {
            seconds = seconds - 1;
        } else {
            stop();
        }

        countDivElement.innerHTML = minutes + ":" + remainingSeconds + ":";
    };

    function updateMillis() {
        let countMillsElement = document.getElementById('millis');
        let counterMillis = 99;
        let millis = 0;

        let intervalMillis = setInterval(() => {

            if (counterMillis < 0) {
                clearInterval(intervalMillis);
                counterMillis = 99;
            } else {
                millis = counterMillis < 10 ? counterMillis + '0' : counterMillis;
            };

            countMillsElement.innerHTML = millis;
            counterMillis--;

        }, 10);

        if (countdownEnded) {
            stop();
            clearInterval(intervalMillis);
        }
    };
<html>
<div class="clock" id="model3">
    <div id="countdown">
      <span id="timer"></span><span id="millis">

      </span>
    </div>
  </div>
  <input type="number" id="minutesInputField" placeholder="minutes" />
  <div class="buttons">
    <button class="btn start" onclick="start()">Start</button>
    <button class="btn pause" onclick="pause()">Pause</button>
    <button class="btn reset" onclick="reset()">Reset</button>

  </div>
  </html>
0 голосов
/ 02 марта 2020

Ваша функция сброса не завершена, она должна содержать что-то вроде:

document.getElementById('minutesInputField').innerHTML = '30:00:00';
...