Запускать событие jQuery только один раз после совпадения условия

jquery html

10484 просмотра

5 ответа

1053 Репутация автора

Я делаю сайт продукта онлайн, запускаю событие прокрутки, при запуске будет отображаться только 12 элементов, но когда 8-й элемент прокручивается до верха, событие прокрутки должно запускаться только один раз, но оно запускается каждый раз, когда я прокручиваю вниз, пожалуйста, помогите , Вот мой код:

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");
        }       
    });
Автор: Bharat Soni Источник Размещён: 26.03.2013 12:36

Ответы (5)


3 плюса

36982 Репутация автора

Позвоните, unbind()чтобы открепить событие от объекта.

$(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");
});
Автор: Daniel Imms Размещён: 26.03.2013 12:37

1 плюс

29355 Репутация автора

Вы можете отменить привязку события после завершения.

подобно $(this).unbind("scroll);

Автор: PSR Размещён: 26.03.2013 12:37

5 плюса

273521 Репутация автора

Используйте on()и off(), и отсоедините обработчик событий, когда прокрутка достигнет нужной точки:

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);
    }
});
Автор: adeneo Размещён: 26.03.2013 12:39

4 плюса

83 Репутация автора

Я думаю, что вам нужен .one метод

$(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");
    }       
});

Вы можете узнать больше здесь: http://api.jquery.com/one/

Автор: tassiodias Размещён: 26.03.2013 12:41

-1 плюса

89 Репутация автора

var thisHash = window.location.hash;
jQuery(document).ready(function() {

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

});

Это даже лучше, потому что вам не нужна кнопка для запуска fancybox. А с предыдущим кодом я не смог вставить форму в fancybox, потому что каждый раз, когда я щелкал внутри формы, она перезапускала fancybox.

Автор: Francis Perron Размещён: 29.04.2015 12:08
Вопросы из категории :
32x32