在同一个函数中使用$(window).load还是$(window).scroll?

4
我在一个网站上实现了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 () ...

你的意思是 $(document).ready 吗? - SLaks
请查看John Resig的文章,了解为什么附加到滚动事件是不好的,以及应该做什么:http://ejohn.org/blog/learning-from-twitter/ - bdukes
4个回答

3

jQuery的.bind()帮助方法允许同时绑定多个事件。

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

3

只需在绑定中添加链,例如:

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

然而,将事件附加到滚动事件是一个非常糟糕的想法。

这里有一个很好的解释和一个伟大的解决方案:http://ejohn.org/blog/learning-from-twitter/


2

像这样:

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

这可能不是一个好主意,因为“scroll”事件会占用相当多的CPU负载。这将导致它被触发两次。 - jAndy

0
为什么不在加载时触发窗口滚动事件呢?您还可以对滚动事件进行命名空间,以便稍后隔离并更好地访问它...
$(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
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接