【问题标题】:$(window).scrollTop tied to $(window).scroll() event acting oddly$(window).scrollTop 绑定到 $(window).scroll() 事件的奇怪行为
【发布时间】:2011-09-29 13:01:17
【问题描述】:

当窗口滚动超过一定数量的像素时,我试图触发一个函数。

这是我的代码:

$(window).scroll(function(){
  if( $(this).scrollTop() >= 100 ) {
    someFunction();
  } else {
    someOtherFunction();
  }
});

它有点工作,但是在触发函数之前滚动后大约有 2-4 秒的延迟,或者根本不触发函数。

在 Safari / Chrome 中试用过。不知道有没有用!

【问题讨论】:

    标签: javascript jquery window scroll


    【解决方案1】:

    代码看起来不错,适合我。

    正如 Wolfram 所说,将处理程序直接附加到滚动事件很少是一个好主意,因为这会触发 很多 并且可能会使用户的系统陷入爬行状态。

    我建议使用Ben Alman's jquery throttle/debounce plugin

    【讨论】:

    • Ben 的插件看起来是一个非常好的解决方案 - 我会检查一下。干杯^R
    • 是的,使用插件解决了这个问题。我猜这个事件触发了无数次,这就是导致问题的原因。感谢@Deebster 的帮助!
    • 不错的链接,Ben 的第一个用法示例几乎正是您想要的。
    【解决方案2】:

    它在 OSX 上的 Chrome15/Safari5.1/FF7 中使用 jQuery 1.6.1 + 鼠标滚轮/滚动条工作。你在这两个函数中做什么?为了测试,我在someFunction 中放了一个简单的alert(),在someOtherFunction 中什么也没有。

    请记住,每次触发滚动事件时都会执行其中一个函数,除非您在调用它后停止它...例如滚动到 100px 线以下后, someFunction 会被调用很多次。

    约翰·雷西格:It's a very, very, bad idea to attach handlers to the window scroll event.

    【讨论】:

    • 这个函数被触发了这么多次,非常好。也许我可以用布尔值或其他东西包装它......
    【解决方案3】:

    如果您通过按住点击按钮而不是使用滚轮来进行滑动,我相信在您释放点击按钮之前该事件不会触发。

    您是否考虑过运行一个检查scrollTop 的循环?

    编辑: 我只是使用窗口滚动事件检查了我的一个旧项目,它在相同的事件中运行完美。

    我猜你里面有你的这个脚本:

    $(function() {
       // code
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2011-07-19
      • 2015-11-15
      • 1970-01-01
      • 2011-06-07
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多