在使用jQuery offset()之前等待DOM更新
我有代码显示隐藏的元素然后得到它的大小:
var div = $('div.foo').show(); // Was hidden. // Need to wait until the DOM is updated to get its offset setTimeout(function() { var offset = div.offset(); bar(offset.top, offset.left); }, 0);
有没有更div.offset()
方法来执行此操作而不是使用setTimeout
为0
推迟调用div.offset()
,或者这是最佳做法? 我可以绑定做一些DOM更新事件或其他什么?
在不传递持续时间参数的情况下调用.show()
是同步操作,因此不需要setTimeout
。 来自文档 :
没有参数,
.show()
方法是显示元素的最简单方法[…]匹配的元素将立即显示,没有动画。 这大致相当于调用
.css('display', 'block')
,除了display属性恢复到最初的状态。
但是,如果指定持续时间,则可以传递一个回调函数,该函数将在动画完成时执行:
var div = $('div.foo').show(400, function() { var offset = $(this).offset(); bar(offset.top, offset.left); });