当逻辑语句的结果发生变化时如何执行回调?
Posted
技术标签:
【中文标题】当逻辑语句的结果发生变化时如何执行回调?【英文标题】: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:该解决方案是我不想做的(因此“不”) 【参考方案1】:除非元素的高度发生变化,否则只需要观察resize和scroll事件。所以试试这个:
$(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'));
这里,外部函数返回的内部函数内部的变量a
和b
分别绑定到$('#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'));
以上是关于当逻辑语句的结果发生变化时如何执行回调?的主要内容,如果未能解决你的问题,请参考以下文章