10

GWT の別の要素に関連するポップアップを設定しようとしているときに、本当に奇妙な動作が見られます。ポップアップの位置(独立したフローティング要素)を設定すると、ページ上で静的で視覚的に動かない完全に異なる要素に対する getAbsoluteRight() または getAbsoluteLeft() などの呼び出しから得られる答えが変わるようです。

何が起こっているのかを確認するためにいくつかの印刷ステートメントを追加したので、コードは次のとおりです。

System.out.println(item.td);
int position = item.td.getAbsoluteRight()-offsetWidth;
System.out.println("left/right:" + item.td.getAbsoluteLeft() + "/" + item.td.getAbsoluteRight() + ". sent:" + (item.td.getAbsoluteRight() - offsetWidth) + "=" + position);
popup.setPopupPosition(position, item.td.getAbsoluteBottom());
System.out.println("left/right:" + item.td.getAbsoluteLeft() + "/" + item.td.getAbsoluteRight() + ". sent:" + (item.td.getAbsoluteRight() - offsetWidth) + "=" + position);
popup.addStyleName("bigger");
System.out.println("left/right:" + item.td.getAbsoluteLeft() + "/" + item.td.getAbsoluteRight() + ". sent:" + (item.td.getAbsoluteRight() - offsetWidth) + "=" + position);
System.out.println(item.td);

これがChromeでの結果です

Menu displayed, widths: 81/340=340
<td class="hover">Daniel?</td>    
left/right:1104/1185. sent:845=845
left/right:1121/1202. sent:862=845
left/right:1121/1202. sent:862=845
<td class="hover">Daniel?</td>

これがFirefoxでの結果です

Menu displayed, widths: 81/340=340
<td class="hover">Daniel?</td>
left/right:1254/1335. sent:995=995
left/right:1273/1354. sent:1014=995
left/right:1273/1354. sent:1014=995
<td class="hover">Daniel?</td>

setPopupPosition() を呼び出した後、固定要素の左/右座標が突然変化します (X 座標は 1254 から 1273 になります) が、関連する要素は実際には (視覚的に) 同じ場所に留まります。ポップアップはその要素の存在さえ知らないので、それがどのように起こるのか本当にわかりません。さらに、エラーを一貫して再現できますが、ポップアップの内容を切り替えると発生しません...

...ちなみに、firefox で指定された座標とページのスクリーンショットを比較したところ、戻り値が間違っているだけでなく、画面サイズ (1366x768) とスクロールがないことを考えると不可能です。

2番目の値が実際には正しい値であるため、位置を2回設定してみることができますが、ここで何が起こっているのかを本当に理解したいです...

どうもありがとう!

4

1 に答える 1