2017-07-11 6 views
0

Ich habe diesen leicht gewundenen Code. Wenn der Benutzer die Höhe eines bestimmten Bereichs nach unten scrollt, setzt er im Wesentlichen die Anzeige eines Objekts auf none, ändert einige CSS-Selektoren und blendet das Element ein. Die else-Anweisung sollte behandelt werden, wenn der Benutzer über dieselbe Höhe scrollt. Das Element sollte ausgeblendet werden, CSS-Selektoren ändern und dann erneut angezeigt werden, indem die Anzeige in eine sichtbare Option geändert wird. Der Grund dafür ist, dass das Element von "statisch" in "fest" geändert wird. Wenn Sie an dem statischen Element vorbei blättern, das Sie im Ansichtsfenster nicht mehr sehen können, wird Folgendes angezeigt: none; und fixiert, so dass es als festes Element im Ansichtsfenster eingeblendet werden kann. Umgekehrt umgekehrt. Das Problem ist, dass das Onscroll-Ereignis jedes Mal ausgelöst wird, wenn ich über die angegebene Höhe scrolle, wodurch das Ereignis bei jedem Scrollen ein- und ausgeschaltet wird. Was ich will, ist für jedes Ereignis, nur einmal zu schießen, wenn die angegebene Höhe einmal für jede Richtung überschritten wird. Ist das möglich?Jquery Trigger Scroll Event Einmal

(function($) {   
    $(document).ready(function(){ 

     $(window).off().scroll(function(){ 

      if ($(this).scrollTop() > $("#carousel").outerHeight()) { 

       $("#nav").css("display", "none"); 
       ...modifying css, etc etc 
       $('#nav').fadeIn(500); 

      } else { 

       $('#nav').fadeOut(500); 
       ...modifying css, etc etc 
       $("#nav").css("display", "static"); 

     } 
    }); 
}); 

})(jQuery); 

Antwort

0
  if ($(this).scrollTop() > $("#carousel").outerHeight()) && $("#nav").hasClass("topclass")) { 

       $("#nav").css("display", "none"); 
       ...modifying css, etc etc 
       $('#nav').fadeIn(500); 

      } else if ($(this).scrollTop() < $("#carousel").outerHeight() && $("#nav").hasClass("bottomclass")) { 

       $('#nav').fadeOut(500); 
       ...modifying css, etc etc 
       $("#nav").css("display", "static"); 

      } 

Hier ist eine Lösung - es ist nicht besonderes Ereignis verbindlich oder irgendetwas nicht verwendet, wenn der Auftrag durch Prüfen, ob die Klasse bereits eingestellt worden ist, so gibt es keinen Grund zu seinem Feuer gemacht wird das Ereignis mehrmals.

Verwandte Themen