1

我有显示隐藏元素然后获取其大小的代码:

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()有没有一种更简洁的方法来做到这一点,而不是用a 推迟调用setTimeout0或者这是最佳实践吗?我可以绑定做一些 DOM 更新事件或其他事情吗?

4

1 回答 1

3

在不传递持续时间参数的情况下调用.show()是同步操作,因此不需要setTimeout. 从文档

没有参数,该.show()方法是显示元素的最简单方法 [...]

匹配的元素将立即显示,没有动画。这大致相当于调用.css('display', 'block'),除了显示属性恢复到最初的状态。

但是,如果您指定持续时间,则可以传递一个回调函数,该函数将在动画完成时执行:

var div = $('div.foo').show(400, function() {
    var offset = $(this).offset();
    bar(offset.top, offset.left);
});
于 2012-08-22T17:43:54.117 回答