在尝试相对于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)并且没有滚动,返回值也是不可能的。
我可能会尝试两次设置位置,因为第二个值实际上是正确的值,但是我真的很想了解这里发生的情况...
非常感谢!
最佳答案
差异恰好是150像素。 (左侧总计75像素)
您是否检查过以下页面:http://validator.w3.org/
边距/内边距(在IE中也有边框)之间通常存在差异。
当我离开您的getAbsoluteRight()-offsetWidth
代码时,您使用td
获得绝对正确的权限。但是在popup
上设置位置。这意味着popup
和td
内容之间有一些边框/边距/填充。getAbsoluteLeft()
和getAbsoluteRight()
(以及顶部和底部)均基于其父元素的滚动和偏移位置来计算。
同样,空对象通常可以以默认宽度结尾。但是,只要输入内容,大小就会适应其内容。