Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一次调用函数_Javascript_Jquery - Fatal编程技术网

Javascript 一次调用函数

Javascript 一次调用函数,javascript,jquery,Javascript,Jquery,我有jQuery函数计数器,我需要在滚动页面时调用它 $(document).ready(function () { $.fn.counter = function () { $(this).each(function () { var num = $(this).data('counter'); var i = 1, self = $(this).html(i);

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

});
但是在这种情况下,在重新加载之后,不会调用page函数


有没有办法在scroll上只调用一次函数,不要再调用它,而是在重新加载页面后调用它?

您应该使用带有
.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')
    }
});

您应该使用带有
.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')
    }
});

是的,我已经试过这样的东西了。但是为什么要使用
scroll.custom
,而不仅仅是
scroll
?@truslivii.lev,因为我不知道您是否还有其他
窗口。scroll
事件。这只是一种安全措施,因为如果没有名称空间,您将删除窗口上的所有滚动事件。顺便说一句,您的小提琴不工作,因为您没有滚动条(因此无法真正触发滚动事件或使滚动高于300):但我将使用我的脚本不在小提琴上;)是的,我已经试过这样的东西了。但是为什么要使用
scroll.custom
,而不仅仅是
scroll
?@truslivii.lev,因为我不知道您是否还有其他
窗口。scroll
事件。这只是一种安全措施,因为如果没有名称空间,您将删除窗口上的所有滚动事件。顺便说一句,您的小提琴不工作,因为您没有滚动条(因此无法真正触发滚动事件或使滚动高于300):但我将使用我的脚本不在小提琴上;)