Javascript - можно проверить, если интервал уже установлен? - PullRequest
3 голосов
/ 31 октября 2011

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

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

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 31 октября 2011

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

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

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

4 голосов
/ 31 октября 2011

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

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

http://jsbin.com/ijuhok/6

1 голос
/ 31 октября 2011

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

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

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

0 голосов
/ 06 октября 2014

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

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

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