【问题标题】:How to execute a callback when the result of a logical statement changes?当逻辑语句的结果发生变化时如何执行回调?
【发布时间】:2011-07-05 09:02:04
【问题描述】:

使用 jquery 是否可以在条件语句从 false 变为 true 时立即触发函数?

我正在寻找一种不消耗所有系统资源的解决方案(即:不是setInterval(function(){},1))。

最后我使用了 .scroll() 而不是下面更雄心勃勃的建议。

【问题讨论】:

  • if( $('#lay3b_top').scrollTop() + $('#lay3b_top').height() == $('#measuring_wrapper').height()) { }问题是条件复杂,没有任何关联且方便的触发器。
  • @Patrick Beardmore:但您同意事件触发器是更好的解决方案,不是吗?
  • 当然,我就是想不出。条件语句决定
    是否滚动到底部。
  • 我不知道你的问题是什么,但你的解决方案肯定是错的!
  • @markus:该解决方案是我不想做的(因此“不”)

标签: javascript jquery logic conditional-statements


【解决方案1】:

除非元素的高度发生变化,否则只需要观察resizescroll事件。所以试试这个:

$(window).bind('resize', handler);
$(document).bind('scroll', handler);

由于这些事件可以经常触发,您应该将处理程序操作保持在最低限度。例如,您可以使用 closure 缓存 $ 调用:

var handler = (function(a, b){
    return function(event) {
        if ((a.scrollTop() + a.height()) == b.height()) {
            /* … */
        }
    })($('#lay3b_top'), $('#measuring_wrapper'));

这里,外部函数返回的内部函数内部的变量ab分别绑定到$('#lay3b_top')$('#measuring_wrapper')的返回值。 (function(){})() 是一个匿名函数表达式,它会立即使用给定的参数调用,以将参数绑定到函数的作用域。

【讨论】:

  • 应该注意,浏览器可以触发大量的“滚动”事件,所以最好让处理程序尽可能快,并且绝对避免 DOM 操作(或推迟它)。
  • @Pointy:是的,绝对的。在这种情况下可以缓存 jQuery 对象,例如:var handler = (function(){ return function(event) {if ((arguments[0].scrollTop()+arguments[0].height()) == arguments[1].height()) { /* … */ } })($('#lay3b_top'), $('#measuring_wrapper'));
猜你喜欢
相关资源
最近更新 更多
热门标签