2017-10-09 139 views
0

我使用GWT PopupPanel在用戶單擊按鈕時在按鈕上方顯示一個彈出窗口。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()似乎確實是設置位置的唯一方式,但它對我通過的位置進行了一些操作(對我的用例來說不必要)。

+0

您可以使用彈出的DOM元素的樣式直接訪問 - 例如PopupPanel.getElement()。getStyle()。setPropertyPx(「top」,topPos); –

+0

啊,看到我試過了,它不起作用(彈出窗口出現在0,0),但關鍵是在調用show()後設置這些屬性。這適用於我,因爲在調用show()後設置位置時沒有看到彈出的「跳轉」,但我不知道是否有任何方法在調用show()之前設置位置而不使用'setPopupPosition()'? 隨意回答你的建議(一定要在調用show()後提及,我會接受! – OMGitzMidgar

+0

我已經添加了答案。 –

回答

0

您可以使用直接訪問彈出式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); 
    } 
});