【问题标题】:$(window).load OR $(window).scroll in the same function?$(window).load 或 $(window).scroll 在同一个函数中?
【发布时间】:2011-01-27 15:17:27
【问题描述】:

我在一个网站上实现了stickyfloat (http://plugins.jquery.com/files/stickyfloat_0.htm)。它适用于一个陷阱。该函数在$(window).scroll 上触发,而不是在$(window).load 上触发。我希望它触发,因为我链接到页面中的锚点(http://tre-stage.wdogsystems.com:8000/faq/#does-the-sale-of-my-receivables-have-a -negative-effect-on-my-credit-report) 并且我希望侧边菜单在页面加载时出现,而不仅仅是在我启动滚动时出现。

如果您查看上面的页面,它会按照我的意愿运行。然而,这只是因为我用$(window).load 重复了相同的功能。这对我来说似乎效率很低。那么,有没有办法将两者链接在一起?

例如:

$(window).scroll || $(window).load (function () ...

【问题讨论】:

标签: javascript jquery javascript-events


【解决方案1】:

jQuery 的.bind()help 方法允许一次绑定多个事件。

$(window).bind('scroll load', function() {
    // code here triggers for both, scroll & load events
});

【讨论】:

    【解决方案2】:

    只是在绑定中链接,例如:

    $(window).bind("scroll load", ...)
    

    但是附加到滚动事件是非常糟糕的主意

    一个很好的解释为什么和一个很好的解决方案:http://ejohn.org/blog/learning-from-twitter/

    【讨论】:

      【解决方案3】:

      像这样:

      $(document).bind('ready load scroll', function() { ... });
      

      【讨论】:

      • 这可能是个坏主意,因为scroll 事件的 CPU 负载非常重。这会触发两次。
      【解决方案4】:

      你为什么不在加载时触发一个窗口滚动事件?您也可以命名您的滚动事件以隔离它并在以后更好地访问它...

      $(window)
         .on('scroll.myscroll', function () {
            // do something on scroll event
         })
         .trigger('scroll.myscroll'); // trigger scroll event on pageload
      

      但是,如果您真的想在窗口加载时运行它(确保 DOM 已完全加载,包括图像等),那么提到的其他示例就可以了。但是使用 .on() 方法,而不是 .bind()。

      $(window).on('scroll.myscroll load.myload', function () {
         // do something on scroll and load events
      });
      

      【讨论】:

        猜你喜欢
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        相关资源
        最近更新 更多