【问题标题】:jquery scrolled event runs code multiple timesjquery滚动事件多次运行代码
【发布时间】:2017-07-03 00:18:11
【问题描述】:

因此,使用以下代码,console.log 输出会在滚动页面时多次滚动到开发工具控制台。

$(document).on("scroll", function() {
    if ($(this).scrollTop() > 25) {
        console.log("scrolled");
        //do something
    }
    else {
        //do something
    }
});

因此,如果我有一堆 javascript 来控制将导航栏设置为粘性,它会有效地运行很多次。这似乎是一个糟糕的方法。

我尝试使用以下代码阻止滚动事件:

$(document).on("scroll", function(e) {
    if ($(this).scrollTop() > 25) {
        console.log("scrolled");
        //do something
        e.preventDefault();
    }
    else {
        //do something
    }
});

但它仍然多次输出滚动到开发工具。 我也尝试使用 @jswebb 建议的 break 语句,但它给了我这个 js 错误 Uncaught SyntaxError: Illegal break statement

这是显示输出的屏幕截图。

我怎样才能防止这段代码运行多次,但如果$(this).scrollTop() !> 25重新运行,那么在else语句中。

干杯

【问题讨论】:

    标签: javascript jquery coding-style standards


    【解决方案1】:

    编辑

    对不起,我是个笨蛋——我看到你的日志在重复,在我的脑海里,我立刻想,“循环!”除了这里没有循环;只是每次滚动超出参数时,控制台都会记录输出。

    我认为这不一定是坏事;这并不是说每次滚动时都会触发代码,而是告诉控制台现在在滚动超过 25 次时立即记录。

    至于你真实世界的粘性标题,我想知道这是否是一个问题?

    $(window).on("scroll", function(e) {
        if ($(this).scrollTop() > 25) {
            $("header").addClass("fixed");
        }
        else {
            $("header").removeClass("fixed");
        }
    });
    

    您只需将其设置为添加一个使您的标头固定超过 25 的类 - 您使用 IRL 的代码只会在您设置的阈值时触发一次。

    Example fiddle


    您是否尝试过在达到限制后使用break 语句退出条件?

    $(window).on("scroll", function(e) {
        if ($(this).scrollTop() > 25) {
            console.log("scrolled");
            //do something
            break;
        }
        else {
            //do something
        }
    });
    

    【讨论】:

    • 您好,感谢您的帮助。 break 给了我这个 js 错误Uncaught SyntaxError: Illegal break statement
    • 我明白你的意思,我想因为console.log("scrolled"); 被触发了很多次,那么我的代码一定是。但我猜代码不会运行多次。必须是某种 jquery 的东西,其中不允许经常运行相同的代码。感谢您的澄清:)
    • 没问题!这不是 jQuery 的事情,只是这种特殊情况只有触发一次的方法。您当然可以编写多次触发的 jQuery,但这里只是添加了一个简单的类 @ 25。该操作不会多次发生,因为它怎么可能发生呢?干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多