2015-04-15 8 views
5

Im, используя jquery.visible.js для обнаружения, когда DIV находится в поле зрения (он запускает анимацию на подключаемом модуле, который имеет эффект анимации круга). Но он продолжает стрелять каждый раз, когда я использую колесо прокрутки, умножая себя на неопределенный срок, и я не могу найти способ остановить его с помощью() или unbind()? благодаря!Как остановить прокрутку() триггеров событий несколько раз

// Check vertical for circliful using jquery.visible.js 
$(window).scroll(function(){ 
    if ($("#moreSection").visible(true)){ 


     // trigger circliful 
     $('#myStat-1').circliful() // this wont stop firing 

} 
}); 
+0

try $ (window) .off() – vaskort

+0

В обоих ответах есть некоторая некорректная информация, прокрутка не загорается на пикселях, а на частоте кадров дисплея. http://codepen.io/anon/pen/xbNOdG?editors=001 – Shikkediel

+0

спасибо Shikkedial, очень интересно знать – user3358014

ответ

3

, как #Shikkediel отметил scroll() увольняют по изменению частоты кадров. поэтому каждый свиток может запускать его сотни раз.

вы можете сделать это:

$(window).scroll(function(){ 
    if ($("#moreSection").visible(true)){ 
     doActionAndStopScript(); 
    } 
}); 

function doActionAndStopScript(){ 
    $('#myStat-1').circliful() // now it will fire once 
    $(window).unbind('scroll'); 
} 

вы можете вызывать только unbind() из-за пределов $(window)

+0

привет, Aryeh, да мне нужно, чтобы он срабатывал только один раз, когда его прокручивали в поле зрения, а затем прослушиватель событий уничтожался, если это возможно - im, используя jquery.visible.js для проверки области просмотра – user3358014

+0

, когда прокручивается в поле зрения? определенную часть страницы? –

+0

еще до того, как я использовал еще один прокручиваемый плагин, и он убил его с помощью этого: $ ('div'). Unbind ('inview'); – user3358014

3

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

var timer; 
$(window).scroll(function() { 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
     if ($("#moreSection").visible(true)){ 
      $('#myStat-1').circliful(); 
     } 
    }, 250); 
}); 

250ms обычно достаточно длинный, чтобы подождать, чтобы запустить код. Вы можете настроить это значение по мере необходимости.

+0

hi there Rory, спасибо за помощь, но он все равно не остановится, после чего выгрузите сайт за несколько секунд. – user3358014

+0

Привет, Рори, он сейчас на сайте: http://www.joewebsitedesigner.co.uk/test/ – user3358014

+0

Awesome, я использую этот метод на задержке 100 мс, событие прокрутки все еще запускается только один раз. –

Смежные вопросы