Вызов функции при прокрутке один раз

0

У меня есть counter функций jQuery, и мне нужно вызвать его, когда я просматриваю страницу

$(document).ready(function () {

    $.fn.counter = function () {
        $(this).each(function () {
            var num = $(this).data('counter');
            var i = 1,
                self = $(this).html(i);
            var interval = setInterval(function () {
                self.html(++i);
                if (i >= num) {
                    clearInterval(interval);
                }
            }, 100);
        });
    };

    $(window).scroll(function() {
        var height = $(window).scrollTop();

        if(height  > 300) {
            $('.counter-1, .counter-2, .counter-3, .counter-4').counter();
        }
    });

});

Проблема в том, что когда я снова прокручиваю страницу, функция снова или снова вызывается снова и снова каждый раз.

Я попытался использовать этот код

$(document).ready(function () {

    $.fn.counter = function () {
        $(this).each(function () {
            var num = $(this).data('counter');
            var i = 1,
                self = $(this).html(i);
            var interval = setInterval(function () {
                self.html(++i);
                if (i >= num) {
                    clearInterval(interval);
                }
            }, 100);
        });
    };

    $(window).one('scroll', function () {
        var height = $(window).scrollTop();

        if (height > 300) {
            $('.counter-1, .counter-2, .counter-3, .counter-4').counter();
        }
    });

});

но в этом случае после перезагрузки функция страницы не вызывается.

Есть ли способ вызвать функцию только один раз на прокрутке и не вызывать ее снова, а вызвать ее после перезагрузки страницы?

Теги:

1 ответ

6
Лучший ответ

Вы должны использовать пространство имен с .on/.off:

$(window).on('scroll.custom', function () {
    var height = $(window).scrollTop();

    if (height > 300) {
        $('.counter-1, .counter-2, .counter-3, .counter-4').counter();
        $(window).off('scroll.custom')
    }
});
  • 0
    Да, я уже пробовал что-то вроде этого jsfiddle.net/u6pah/2 . но почему вы используете scroll.custom , а не просто scroll ?
  • 0
    @ truslivii.lev, потому что я не знаю, есть ли у вас какое-либо другое событие window.scroll . Это просто безопасность, так как без пространства имен вы удалили бы каждое событие прокрутки в окне.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню