2

ブラウザウィンドウに関連する要素のX座標とY座標を取得しようとしています。

私が取り組んでいるシステムは、さまざまなフレームで構成されています。原則としてフレームは避けていますが、現在はフレームを多用するソフトウェアに取り組んでいます。

特定の要素のすぐ隣にポップアップを配置する必要があるポップアップエンジンを構築しています。この要素は、いつでもフレームのいずれかのどこにあってもかまいません。

したがって、ブラウザウィンドウに関連する要素のX座標とY座標を決定する必要があります。これにより、ポップアップをその横に配置できます。

私はposition()、offset()、さらにはgetBoundingClientRect()を試しましたが、今のところ運がありません。

誰かがこれを試したことがありますか?

4

1 に答える 1

0

ページが次のように構成されていると仮定します。

  • ルートウィンドウ(つまり、ブラウザウィンドウ、#ID = ROOT)
    • フレーム(フレームセットまたはiframe、#ID = 1)
    • フレーム(フレームセットまたはiframe、#ID = 2)

私の理解では、ポップアップ(ツールチップはおそらく?)をROOTにレンダリングしたいのですが、1または2の関連要素に基づいてポップアップを配置します。これは、ROOTで行われる配置は、明らかにROOTの配置に関連するため、課題となります。サブフレームではありません。従うべきガイドラインは、おそらく次のようなものかもしれません。

  1. 要素を含むウィンドウに対する要素の(#ID = ELEM)絶対位置を取得します。
  2. ROOTへの参照を取得し、ROOTのコンテキストでポップアップポジショニングを実行します。
  3. ROOTのコンテキストになり、ELEMの絶対位置がわかったので、位置を変更して、ROOTのコンテキスト内にELEMを含むフレームの絶対位置を含め、ポップアップをその新しい位置にレンダリングします。

jQueryを使用したいくつかのコードガイドライン:

// executing within the context of 1.2:
// get the element to which the popup relates
var ELEM = $("#ELEM");
// get the root window, i.e. ROOT
var ROOT = (function () {
    var r = window;
    while ($("#SOME-UNIQUE-ELEMENT-ON-ROOT", r).length == 0) {
        r = r.parent;
    }
    return r;
})();
// get ELEM's current absolute position in relation to 1.2
var top = ELEM.position().top;
var left = ELEM.position().left;
// get the current document's containing element in relation to ROOT
var C = $((document.parentWindow || document.defaultView).frameElement.parentNode);
// modify ELEM's position to compensate for the absolute position of C on ROOT
top += C.position().top;
left += C.position.left;

ROOTでポップアップをレンダリングする新しい絶対位置ができたので、新しい「上」と「左」の座標を使用してレンダリングエンジンを呼び出します。

それがまったく意味をなさないことを願っています...

于 2013-01-22T11:38:07.290 に答える