我正在使用GWT PopupPanel在用户单击按钮时在按钮上方显示一个弹出窗口。

我正在设置弹出窗口的位置,并显示如下:

panel.setPopupPosition(leftPos, topPos);
panel.show();


但是,当我查看弹出窗口后的最高值时,我发现它的位置比我为其分配的值低一些。

问题可能是setPopupPosition更改了传入的值:

// Account for the difference between absolute position and the
// body's positioning context.
left -= Document.get().getBodyOffsetLeft();
top -= Document.get().getBodyOffsetTop();


如何确保GWT PopupPanel的位置与我给它的值完全相同? setPopupPosition()似乎确实是设置位置的唯一方法,但是它对传入的位置进行了一些操作(对于我的用例而言这是不必要的)。

最佳答案

您可以直接访问弹出窗口的DOM元素来调整PopupPanel的位置。但是应该在调用show()之后并在弹出窗口可见之前完成。否则,您可能会看到一些“跳跃”效果。
例:

PopupPanel popupPanel = new PopupPanel();
...
// this callback will be called after PopupPanel.show(), but before it is shown
popupPanel.setPopupPositionAndShow(new PositionCallback() {
    @Override
    public void setPosition(int offsetWidth, int offsetHeight) {
        Style style = popupPanel.getElement().getStyle();
        style.setLeft(100, Unit.PX);
        style.setTop(100, Unit.PX);
    }
});

10-07 13:33
查看更多