2015-04-15 4 views
5

Im mit jquery.visible.js zu erkennen, wenn ein DIV in Sicht ist (es startet die Animation auf Plug-in, die wie ein Kreis Animationseffekt hat). Aber es feuert immer weiter, wenn ich das Scrollrad benutze, multipliziere es auf unbestimmte Zeit und ich kann keinen Weg finden es mit off() oder unbind() zu stoppen. Vielen Dank!Wie scroll() triggern Ereignisse mehrmals stoppen

// 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

Beide Antworten haben einige falsche Informationen, Scroll feuert nicht auf Pixel, sondern auf die Bildfrequenz des Displays. http://codepen.io/anon/pen/xbNOdG?editors=001 – Shikkediel

+0

danke Shikkedial, sehr interessant zu wissen – user3358014

Antwort

3

als #Shikkediel wies darauf hin, scroll() wird auf die Bildrate ändert gefeuert. Jede Scroll kann also hunderte Male auslösen.

Sie können dies tun:

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

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

können Sie nur die unbind() rufen von außerhalb des $(window)

+0

hallo Aryeh, ja ich brauche es nur einmal zu schießen, wenn es in Sicht gescrollt und dann der Event-Listener zerstört, wenn möglich - Ich benutze jquery.visible.js, um das Viewport – user3358014

+0

zu testen, wenn was in Sicht gescrollt wird? ein bestimmter Teil der Seite? –

+0

auch bevor ich ein anderes Scroll-Deklinations-Plugin benutzt habe und es damit getötet habe: $ ('div'). Unbind ('inview'); – user3358014

3

The scroll Ereignis einmal abfeuert für jedes Pixel, das gescrollt wird. Um dieses Verhalten zu umgehen, können Sie einen Zeitgeber verwenden, der nur Ihre Logik nach Scrolling hat für x Millisekunden ausgeführt wurde. Versuchen Sie dies:

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

250ms ist normalerweise lang genug, um zu warten, um Ihren Code zu feuern. Sie können diesen Wert wie gewünscht einstellen.

+0

Hallo Rory, danke für die Hilfe, aber es wird immer noch nicht aufhören, ich werde die Seite in ein paar Sekunden hochladen .. – user3358014

+0

Hallo Rory, er ist die Seite jetzt: http://www.joewebsitedesigner.co.uk/test/ – user3358014

+0

Awesome, ich verwende diese Methode bei 100ms Verzögerung, das Scroll-Ereignis wird nur noch einmal ausgelöst. –

Verwandte Themen