滚动一次调用函数

tru*_*lev 0 javascript jquery

我有jQuery函数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).scroll(function() {
        var height = $(window).scrollTop();

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

});
Run Code Online (Sandbox Code Playgroud)

问题是当我再次向上或向下滚动页面时,每次都会一次又一次地调用函数.

我试着使用这段代码

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

});
Run Code Online (Sandbox Code Playgroud)

但在这种情况下重新加载页面函数后不会被调用.

有没有办法在滚动时只调用一次函数而不再调用它但在重新加载页面后调用它?

Kar*_*non 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')
    }
});
Run Code Online (Sandbox Code Playgroud)