我只想在某个陈述为真的情况下听一个窗口滚动事件,让我们说var flag
。我想我会这样做,但我不确定这是不是最好的方式。
$(window).on("scroll", someFunction());
if (flag) $(window).off("scroll");
或者,可能更好,
if (flag) $(window).on("scroll", someFunction());
答案 0 :(得分:2)
这个问题的答案在很大程度上取决于场景。在进入解决方案之前,我们需要考虑3个项目,
滚动处理程序功能需要打开/关闭的频率是多少?我们可以使用标志,
您可以在测试场景后决定采用上述方法之一。这取决于功能打开/关闭的频率。
您是否需要在每个滚动条件上调用您的处理函数? Throttle允许您每X秒执行一次处理函数。这比调用onscroll函数更好。
在这种情况下,油门很好。更好的是,如果您的油门超过几秒钟,您可以将1a组合在一起。每个油门秒后(bind / unbind / rebind)。同样,所有这些时间取决于您的情况。
处理函数如果处理函数很大,那么我会寻找替代方法,而不是将其绑定到scroll事件。请记住,JavaScript执行将阻止页面响应,因此即使您的脚本需要几毫秒,在每个滚动(无油门,e.t.c)上执行它都会降低页面速度并使其无法使用。
答案 1 :(得分:0)
绑定和解除绑定滚动事件都有成本。在事件上调用处理程序也有成本。但更重要的是您拥有的代码的清晰度以及您需要实现的应用程序的响应能力。
如果你能达到60 fps,应用程序会很流畅。因此,我会保留您发现的任何代码,使其清晰并与您的代码库保持一致,并进行一些性能测试,看看您是否使用这些滚动处理程序获得60 fps,并且如果您有任何问题,则可以解决性能问题。
答案 2 :(得分:0)
因为添加/删除事件处理程序非常昂贵,并且您必须编写更多代码以防止事件处理程序被添加多次。所以我建议更简单的解决方案,一次添加事件并在处理程序开始时检查flag
。
$(window).on("scroll", someFunction());
function someFunction() {
if (!flag) return;
}
这样您只需在代码中随时随地调用flag = false;
即可停止滚动事件。
答案 3 :(得分:0)
如果你说的话,
我想监听到窗口滚动事件仅当某个声明时 true ...
确实是你想要的,然后使用你的第二块代码。
if (flag) $(window).on("scroll", someFunction());
如果您尝试有条件地调用处理程序onscroll,那么执行类似fiddle的操作,