Javascript — Можно проверить, установлен ли интервал уже?

#javascript #jquery #setinterval #clearinterval

#javascript #jquery #setinterval #clearinterval

Вопрос:

У меня есть div, который подпрыгивает каждые 5 секунд, используя интервал.

При прокрутке до нижней части страницы этот div исчезает, а интервал очищается.

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

Есть ли способ проверить, установлен ли интервал, и если да, очистить его, а если нет, установить его?

Причина, по которой мне нужно очистить интервал, заключается в том, что эффект отскока jquery заставляет div появляться снова, даже если он скрыт.

JSBIN: http://jsbin.com/ijuhok/4 /

Ответ №1:

Кажется, что вы устанавливаете интервал всякий раз, когда он прокручивается. Итак, если я прокручиваю вниз, а затем снова прокручиваю вниз, вы устанавливаете его дважды.

Просто очищайте его перед каждым разом, когда вы его устанавливаете, и все должно быть в порядке.

http://jsbin.com/ijuhok/6

Ответ №2:

Вам нужно перезаписать существующий интервал, чтобы вы могли очистить его отовсюду: http://jsbin.com/ijuhok/5 /.

 $j("#more").fadeIn('slow',function(){
    ResInterval = window.setInterval(bounceMore, 5000);
    // no "var"
});
 

Вы можете исключить $(document).ready for window , потому что он всегда доступен.

Комментарии:

1. Вау! Вы были так быстры, что я даже не могу принять ответ еще 6 минут. Отлично, спасибо! — И спасибо всем остальным за быстрые и совершенные решения — это определенно было связано с постоянным переопределением с помощью ‘var’

2. Хорошо, происходит что-то очень странное, если вы оставляете сайт без дела на минуту или около того, div, похоже, теряет свое позиционирование и перемещается в верхнюю часть экрана. Вы хоть представляете, что происходит? dl.dropbox.com/u/396112/_IMG/_misc/setinterval-bounce.jpg (OS X 10.7.2, Chrome 15.0.874.106)

3. @waffl: я не знаю почему, но сброс установленных свойств CSS, похоже, работает: jsbin.com/ijuhok/7 .

4. О нет, мне неприятно вам говорить, но у него все еще возникают проблемы, такие странные, понятия не имею, почему: dl.dropbox.com/u/396112/_IMG/_misc /…

5. @waffl: я повозился, и этот хак, похоже, решает проблему (в Chrome): jsbin.com/ijuhok/8/edit .

Ответ №3:

Ваша проблема в том, что вы определяете ResInterval в локальной области, потому что вы использовали var :

 $j("#more").fadeIn('slow',function(){
   var ResInterval = window.setInterval('bounceMore()', 5000);
});
 

Удалите var префикс, и ваш код будет работать так, как ожидалось: в настоящее время ResInterval это локальная переменная функции обратного fadeIn вызова. Если var значение опущено, интервал будет назначен ближайшему ResInterval объявлению (с использованием var ).

Комментарии:

1. Ах, точно — спасибо вам за объяснение, особенно за то, что вы обратили мое внимание на область действия переменной.

Ответ №4:

Я сделал это, как показано ниже, моя проблема была решена. вы должны установить значение, подобное «false», при отключении таймера.

 var timeer=false;
----
----
if(timeer==false)
{
  starttimer();  
}
-----
-----
function starttimer()
{
  timeer=setInterval(activefunction, 1000); 
}

function pausetimer()
{
  clearTimeout(timeer);
  timeer=false;
}