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()への呼び出しをsetTimeoutofで延期する代わりに、これを行うためのよりクリーンな方法はあります0か、またはこれはベストプラクティスですか? 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 に答える