#javascript #jquery #setinterval #clearinterval
#javascript #jquery #setinterval #clearinterval
Вопрос:
У меня есть div, который подпрыгивает каждые 5 секунд, используя интервал.
При прокрутке до нижней части страницы этот div исчезает, а интервал очищается.
Тем не менее, я думаю, что существует проблема с тем, что интервал создается несколько раз и перекрывается сам по себе.
Есть ли способ проверить, установлен ли интервал, и если да, очистить его, а если нет, установить его?
Причина, по которой мне нужно очистить интервал, заключается в том, что эффект отскока jquery заставляет div появляться снова, даже если он скрыт.
JSBIN: http://jsbin.com/ijuhok/4 /
Ответ №1:
Кажется, что вы устанавливаете интервал всякий раз, когда он прокручивается. Итак, если я прокручиваю вниз, а затем снова прокручиваю вниз, вы устанавливаете его дважды.
Просто очищайте его перед каждым разом, когда вы его устанавливаете, и все должно быть в порядке.
Ответ №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;
}