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) и без прокрутки.
Я мог бы, вероятно, попытаться установить положение дважды, так как второе значение на самом деле является правильным, но я бы очень хотел понять, что здесь происходит...
Большое спасибо!
Ответы
Ответ 1
Разница составляет ровно 150 пикселей. (Может быть в сумме 75 пикселей в левой части)
Вы проверили страницу против: http://validator.w3.org/
Часто существуют различия между полями/дополнениями (также граничит с IE).
Как только я выхожу из вашего кода getAbsoluteRight()-offsetWidth
, вы используете td
, чтобы получить абсолютное право. Но установив положение на popup
. Это должно означать, что у вас есть границы/поля/отступы между содержимым popup
и td
.
getAbsoluteLeft()
и getAbsoluteRight()
(а также верхний и нижний) вычисляются на основе их прокрутки родительского элемента и позиций смещения.
Также пустой объект может часто заканчиваться шириной по умолчанию. Но как только вы вводите контент, размер адаптируется к его контенту.