web-dev-qa-db-ja.com

DOM要素がいつ移動またはサイズ変更されたかを知る方法

ページ上でDOM要素が移動またはサイズ変更されたことを通知するDOMイベントをリッスンするかどうかを知りたいです。ドラッグ/ドロップされる要素については話していません。例として、ページに3つのアイテムのリストがあり、JSを使用してページから上位2つのリストアイテムの1つを削除する(または非表示にするなど)場合に、ハンドラーをアタッチして実行するようにします。 3番目のリストアイテムはページ内で上に移動します。

私はjQueryを使用しているので、単純なjavascriptまたはjQueryの回答で問題ありません。

要素レベルでmove/position/resizeイベントがない可能性があるため、ページが再描画されたことを通知するページ/ドキュメントレベルのイベントがあり、関数を再度呼び出す必要があるかどうかを確認できますか?

背景

要素を削除するためにwebservice呼び出しが行われている間、要素の上に透明なdivを置きます。そのオーバーレイdivを絶対的に配置する必要があるため、最初にカバーする要素を追跡する必要があります。実際には、それをベース要素に固定します。

26
slolife

一般的に、要素の移動/サイズ変更のコールバックを取得できません。インターバルポーラーで常にディメンションをチェックし続ける必要があるため、応答性が少し低下します。ウィンドウのresizeイベント(およびオーバーフローまたは固定配置が関係する場合はscroll)でチェッカーを呼び出すことで、これを改善できます。DOMミューテーションイベントリスナーを追加して、要素が削除されたときに通知を受けることもできます。ドキュメントツリーからですが、これはすべてのブラウザで機能するわけではありません。

プレーンCSSでオーバーレイを実行できませんか?例えば。 position: relative隠す要素に、次のようにその中にオーバーレイを追加しますか?

position: absolute;
z-index: 10;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: 0.5;
12
bobince

私はこのソリューションが長い間関連するとは考えていませんが、オーバーフローイベントとアンダーフローイベントに基づいた優れたクロスブラウザソリューションがあります here

サイズ変更のリスニングマジックを有効にするには、オブジェクト要素をターゲット要素に挿入し、特別なスタイルのリストを設定してビューから非表示にし、サイズ変更を監視します。これは、ターゲット要素の親がサイズ変更されたときに警告するトリガーとして機能します。

<object>要素のコンテンツには、ウィンドウのように、ネイティブのresizeイベントがあります。

15
Harsha Ivaturi

そのための(Ben Alman)プラグインがあります。TM

これは良いプラグインですが、ポーリングの量を抑えるために、控えめに(つまり、要素が多すぎないように)使用することをお勧めします。

4
jmar777