Показать сообщение отдельно
  #2 (permalink)  
Старый 02.03.2020, 15:16
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Используете более осмысленные названия переменных, не стал разбираться, что у вас в коде происходит.

Пример управляемого интервала:
<div><input type="number" readonly value="0"/></div>
<button type="button" data-action="pause">Pause</button>
<button type="button" data-action="resume">Resume</button>
<button type="button" data-action="destroy">Destroy</button>

<script>
var controlledInterval = function (callback, delay) {
    var args = [].slice.call(arguments, 2);
    
    var stepsPerLoop = 50,
        loopDelay = delay / stepsPerLoop,
        counter = 0,
        pause = false,
        timeout;
        
    timeout = setTimeout(function tik() {
        if (!pause) {
            counter += loopDelay;
        }
        
        if (counter >= delay) {
            callback.apply(window, args);
            
            counter = 0;
        }
        
        timeout = setTimeout(tik, loopDelay);
    }, loopDelay);
    
    return {
        pause: function () {
            pause = true;
        },
        resume: function () {
            pause = false;
        },
        destroy: function () {
            clearTimeout(timeout);
        }
    };
};

var input = document.querySelector('input'),
    interval = controlledInterval(function () {
        input.value = +input.value + 1;
    }, 1000);

document.querySelectorAll('[data-action]').forEach(function (node) {
    node.addEventListener('click', function () {
    	interval[this.dataset.action]();
    });
});
</script>
Ответить с цитированием