3

HTML ページでは、要素のスタイルの変更 (マージン、パディング、高さなど)、他の要素の挿入または削除、または他の要素のスタイルの変更など、さまざまな理由で要素の位置が変更される可能性があります。

jQuery ダイアログが常にアンカーの隣に配置されるようにする必要があるため、アンカーが移動するとダイアログも移動します。ただし、ダイアログが表示されているページを制御しません (JS を動的に挿入します)。MutationObserver を使用して要素 (およびそのすべての親要素) の offsetTop プロパティへの変更を監視できると考えましたが、offsetTop の変更によってミューテーション イベントが発生するようには見えません。

offsetTop の変更によってミューテーション イベントが発生しないことを確認したり、オフセット トップを監視する方法を教えてもらえますか?

あるいは、ダイアログがアンカーにとどまるようにするための他の手法がある場合、私はすべて耳を傾けます-ただし、ページ自体は制御せず、ダイアログのみを制御するという制約に注意してください:)

フィドル

次のフィドルでは、「マージン」ボタンをクリックすると、アンカー要素のマージントップが変更され、style属性が変更され、再配置がトリガーされます。ただし、offsetTop 属性が変更されていても、他のボタンをクリックしても再配置されません。position()関数を呼び出すには、他の 2 つのボタンが必要です。

http://jsfiddle.net/ustmssx7/2/

制約

私は HTML や Javascript を制御していません。私の JS は他の人のページに挿入されているため、できることは非常に限られています。

後退する

私のフォールバック ソリューションは、window.anchor.offsetTop100 ミリ秒ごとにポーリングし、変更された場合は再配置することです。ただし、ポーリングはうまくいかないので、代わりにイベントに反応できれば、はるかに良いでしょう。

4

1 に答える 1

5

offsetTopMutationObserverHTML 構造の変化しか観察できないため、 では観察できません。したがって、ページの実際の HTML に表示される HTML データ。

あなたの例では、実際に必要なのはページの構造全体を観察することです。これは、ポップアップの位置に影響を与える可能性があるものがいくつでもあり、ページに変更があった場合は、ページを再配置する必要があるためです。現れる。ただし、CSS アニメーションやホバー効果など、ページの HTML を変更せずにページのレンダリング状態を変更する方法がまだあることに注意してください。これらは、このタイプのソリューションでは解決できません。

于 2015-01-31T20:36:27.880 に答える