статическое позиционирование GWT popuppanel - PullRequest
3 голосов
/ 12 сентября 2011

Я использую всплывающую панель GWT для отображения некоторой информации, сложенной вертикально на моей странице JSP.Проблема, с которой я сталкиваюсь, заключается в том, что, как только всплывающая панель отображается, она не удерживается в установленном положении.Я устанавливаю положение всплывающей панели с помощью setPopupPosition ().Однако всякий раз, когда пользователь прокручивает браузер, отображаемая всплывающая панель перемещается вверх и вниз соответственно.Он не сохраняет свою первоначальную позицию, где он был отображен.

Я попытался установить для свойства css значение (position: fixed;), примененное к всплывающей панели, но оно не работает.Я где-то читал, что для того, чтобы HTML-элемент отображался статически, мы можем использовать для этого положение: fixed и width: 100%.Но в моем случае я не могу установить ширину на 100%, так как мне нужно, чтобы всплывающая панель отображалась для определенного размера.

Есть ли способ добиться фиксированного положения всплывающей панели в GWT?Придется ли мне слушать события полосы прокрутки браузера, чтобы исправить положение, или это может быть обработано по-другому.

Это мой фрагмент кода, который я использую для установки позиции всплывающей панели в GWT.

           final PopupPanel simplePopup = new PopupPanel(false);
           _beamMenu = simplePopup;
           rendererDisplay(response, simplePopup,true);
           int left =_beamIcon.getAbsoluteLeft() + _beamIcon.getOffsetWidth() - simplePopup.getOffsetWidth();
           int top = _beamIcon.getAbsoluteTop() - simplePopup.getOffsetHeight();
           simplePopup.setPopupPosition(left, top);

Любая помощь в этом отношении будет высоко оценена.

Большое спасибо, Ашиш

Ответы [ 2 ]

4 голосов
/ 11 декабря 2012

добавить css с: position: fixed !important;

2 голосов
/ 24 декабря 2011

Поведения PopupPanel по умолчанию должно быть достаточно. Вы действительно хотите position: absolute, а не fixed. (См. http://www.quirksmode.org/css/position.html для объяснения типов позиций, но fixed - это когда плавает при прокрутке).

Проблема, с которой вы, вероятно, сталкиваетесь, заключается в том, что при показе PopupPanel он удаляется из того места, где он находился в DOM, и добавляется в RootPanel:

(Это из GWT 2.4, так что ваш точный код может очень)

public void show() {
    if (showing) {
        return;
    } else if (isAttached()) {
        // The popup is attached directly to another panel, so we need to remove
        // it from its parent before showing it. This is a weird use case, but
        // since PopupPanel is a Widget, its legal.
        this.removeFromParent();
    }
    resizeAnimation.setState(true, false);
}

...

public void setState(boolean showing, boolean isUnloading) {
    ...
    RootPanel.get().add(curPanel);
    ...
}

В результате, хотя position: absolute должно быть достаточно, вероятно, ваши другие виджеты верхнего уровня также абсолютно позиционированы. Поэтому, когда вы прокручиваете страницу, вы, вероятно, фактически прокручиваете содержимое одного из ваших других виджетов, и PopupPanel застрял к внешнему элементу, который не имеет большой высоты смещения и не прокручивается. Вот почему он выглядит так же, как если бы он использовал fixed позиционирование (то есть всегда XX пикселей сверху и сбоку окна браузера).

Вернитесь и посмотрите на конструкцию вашей страницы и исправьте другие виджеты, и все будет в порядке. Из моих наблюдений новые LayoutPanels используют position: absolute повсюду, поэтому вам, возможно, придется вручную установить его на relative.

...