Подтвердить что ты не робот

Gwt firefox getAbsoluteLeft()

Я вижу действительно странное поведение, пытаясь установить всплывающее окно относительно другого элемента в 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>

так что левые/правые координаты фиксированного элемента внезапно меняются (координата X идет от 1254 до 1273) после вызова setPopupPosition(), тогда как соответствующий элемент фактически остается в одном месте (визуально). Я действительно не знаю, как это происходит, поскольку всплывающее окно даже не знает о существовании этого элемента. Более того, хотя я могу последовательно воспроизводить ошибку, это не происходит, если я переключаю всплывающее содержимое...

... кстати, я сравнил координаты, заданные firefox, с скриншотом страницы, а возвращаемые значения не только ошибочны, но и невозможны с учетом моего размера экрана (1366x768) и без прокрутки.

Я мог бы, вероятно, попытаться установить положение дважды, так как второе значение на самом деле является правильным, но я бы очень хотел понять, что здесь происходит...

Большое спасибо!

4b9b3361

Ответ 1

Разница составляет ровно 150 пикселей. (Может быть в сумме 75 пикселей в левой части) Вы проверили страницу против: http://validator.w3.org/ Часто существуют различия между полями/дополнениями (также граничит с IE).

Как только я выхожу из вашего кода getAbsoluteRight()-offsetWidth, вы используете td, чтобы получить абсолютное право. Но установив положение на popup. Это должно означать, что у вас есть границы/поля/отступы между содержимым popup и td.

getAbsoluteLeft() и getAbsoluteRight() (а также верхний и нижний) вычисляются на основе их прокрутки родительского элемента и позиций смещения.

Также пустой объект может часто заканчиваться шириной по умолчанию. Но как только вы вводите контент, размер адаптируется к его контенту.