Ejecute el evento jQuery solo una vez después de que una condición coincida

Estoy haciendo sitio de productos en línea, estoy desencadenando un evento de desplazamiento, al inicio solo se mostrarán 12 elementos pero cuando el 8º elemento se desplaza al evento de desplazamiento superior debe ejecutarse solo una vez, pero se ejecuta cada vez que me desplazo hacia abajo, por favor ayuda . Aquí está mi Código:

var navigation_offset_top = $('.prods-list li:nth-child(4)').offset().top; $(window).on("scroll",function(){ var scroll_top = $(window).scrollTop(); // current vertical position from the top // if scrolled more than the navigation, change its position to fixed to stick to top, otherwise change it back to relative if (scroll_top > sticky_navigation_offset_top) { console.log("Hi"); } }); 

Use on() y off() , y off() el controlador de eventos cuando el desplazamiento llegue al punto correcto:

 var navigation_offset_top = $('.prods-list li:nth-child(4)').offset().top; $(window).on("scroll", doScroll); function doScroll() { var scroll_top = $(window).scrollTop(); if (scroll_top > sticky_navigation_offset_top) { console.log("Hi"); $(window).off('scroll', doScroll); } }); 

Creo que lo que necesitas es un método

 $(window).one("scroll",function(){ var scroll_top = $(window).scrollTop(); // current vertical position from the top // if scrolled more than the navigation, change its position to fixed to stick to top, otherwise change it back to relative if (scroll_top > sticky_navigation_offset_top) { console.log("Hi"); } }); 

Puede obtener más información aquí: http://api.jquery.com/one/

Llamada unbind() para desvincular el evento del objeto.

 $(window).on("scroll",function(){ var scroll_top = $(window).scrollTop(); // current vertical position from the top // if scrolled more than the navigation, change its position to fixed to stick to top, otherwise change it back to relative if (scroll_top > sticky_navigation_offset_top) { console.log("Hi"); } $(this).unbind("scroll"); }); 

puedes desvincular el evento una vez completado.

Como $(this).unbind("scroll);

 var thisHash = window.location.hash; jQuery(document).ready(function() { if(window.location.hash) { jQuery.fancybox(thisHash, { padding: 20 // more API options }); } }); 

Esto es aún mejor, porque no necesitas el botón para activar fancybox. Y con el código anterior no pude insertar un formulario dentro de fancybox, porque cada vez que hacía clic dentro del formulario, estaba relanzando Fancybox.