我有代码显示隐藏元素,然后获取其大小:
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
的调用,或者这是最佳做法?我可以绑定一些DOM更新事件吗?
答案 0 :(得分:3)
在不传递持续时间参数的情况下调用.show()
是同步操作,因此不需要setTimeout
。来自docs:
没有参数,
.show()
方法是显示元素的最简单方法[...]匹配的元素将立即显示,没有动画。这大致相当于调用
.css('display', 'block')
,除了显示属性恢复到最初的状态。
如果指定持续时间,则可以传递一个回调函数,该函数将在动画完成时执行:
var div = $('div.foo').show(400, function() {
var offset = $(this).offset();
bar(offset.top, offset.left);
});