Как перезапустить интервал после небольшой задержки jquery - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь повторить интервал для готового документа.Интервал повторяется каждые 3 секунды, но я хочу, чтобы он остановил событие onmousemove на 5 секунд, а затем перезапустил интервал.

Это мой код:

$(document).ready(function(){
    var myInterval = setInterval(alertMe, 3000);

    function alertMe(){
        alert('jj');
    }

    $(document).mousemove(function(event){
        // I want delay 5 seconds and then initialize myInterval again
        setTimeout(function(){}, 5000);
        clearInterval(myInterval);
        setInterval(alertMe, 3000);
    });
});

Ссылочный ответ 1: JavaScript: Как заставить setInterval () запускаться сейчас?

Ссылочный ответ 2: Как ждать 5 секунд с помощью jQuery?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Во-первых, обратите внимание, что ваш вопрос говорит о том, что вы хотите остановить интервал на mousedown, но ваш код использует mousemove.

Во-вторых, не используйте alert() для проверки этого, поскольку он блокирует обновление пользовательского интерфейса.Вместо этого используйте console.log().

Наконец, чтобы решить проблему, используйте вызов setTimeout() в событии мыши, чтобы отложить перезапуск интервала.Попробуйте это:

$(document).ready(function() {
  function logMe() {
    console.log('jj');
  }
  
  function startInterval() {
    return setInterval(logMe, 3000);
  }
  
  var interval = startInterval(), timeout;

  $(document).mousemove(function(event) {
    clearInterval(interval);
    clearTimeout(timeout);
    
    timeout = setTimeout(function() {
      interval = startInterval();
    }, 2000); // note 2000 delay here, as it compounds with the 3000 delay on the 
              // interval to make a 5000ms delay
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
0 голосов
/ 19 сентября 2019

Вы можете попробовать приведенный ниже код, который является небольшой модификацией только для вашего кода.Вы можете использовать обработчик событий mousedown и внутри него clearinterval и установить новый интервал через 5 секунд, используя settimeout

$(document).ready(function(){
    var myInterval = setInterval(alertMe, 3000);
    var myTimeout;

    function alertMe(){
        alert('jj');
    }

    $(document).mousedown(function(event){
        clearInterval(myInterval); // clear interval as soon as mouse over
        clearTimeout(myTimeout);
        // I want delay 5 seconds and then initialize myInterval again
        myTimeout = setTimeout(function(){
           myInterval = setInterval(alertMe, 3000); // set interval after 5 seconds
        }, 5000);
    });
});
...