1

我有在窗口加载、滚动和调整大小时触发的代码:

jQuery(window).bind("load scroll resize", function() {
   // do stuff on every event

   // do something else only once

});

但是我希望代码的一部分只触发一次。如何才能做到这一点?

更新 - 我已经在重新触发的代码中定义了一个变量,理想情况下它喜欢在不重新触发的代码中使用。

4

2 回答 2

3

看起来这就是您真正想要的:

jQuery(document).ready(function () {
    var foo = "bar"; //define on load
    jQuery(window).on("scroll resize", function () {
        jQuery("body").append(foo); // used on scroll/resize events
    })
})

小提琴(您可以调整小提琴窗口的大小以使用定义的变量查看事件的工作情况)


如果您还希望在初始加载时发生滚动/调整大小事件,您可以执行以下操作:

jQuery(document).ready(function () {
    var foo = "bar"; //define on load
    var myFunc = function () {
        jQuery("body").append(foo); // used on scroll/resize events
    }
    myFunc();
    jQuery(window).on("scroll resize", myFunc)
})

小提琴

另一个可以测试滚动的示例- 癫痫警告 :)

jQuery()在我的例子中也使用了,只是因为你这样做了。除非您有某种冲突,否则大多数人更喜欢使用快捷方式$()


如果我的示例代码有任何混淆,您上面的代码(注释)将如下所示:

jQuery(document).ready(function () {
    // do something else only once
    var myFunc = function () {
        // do stuff on every event
    }
    myFunc(); //remove this if you don't want it called on initial load
    jQuery(window).on("scroll resize", myFunc)
})

基本上在上面的示例中,在初始加载时,您的函数和事件将被声明、初始化和调用。然后每次发生滚动和调整大小事件时都会调用该函数。

于 2013-08-15T15:21:55.290 回答
2
var some_var = 1;

$(window).on("load scroll resize", function() {
   // do stuff on every event
});

$(window).one("load scroll resize", function() {
   // do stuff only once
});

这将只执行一次代码的一部分,并且每次都执行另一部分。由于some_var在两个块之外声明,它将在两个块内都可用。

于 2013-08-15T15:15:28.020 回答