实现GWT拖动时,使用CSS setProperty for top不能正常工作

时间:2016-11-18 21:57:07

标签: css gwt drag

我正在实现一个GWT应用程序,有一个滚动面板,包含图像的流程面板,鼠标按下/移动/向上拖动滚动面板中的流程面板。

左侧部分(x方向)工作正常,但顶部(y方向)的相同代码不能很好地工作,它似乎会摇晃并移动不稳定。

不知何故,最高值远远大于造成问题的左边,但不知道它是如何发生的,以及如何使Y方向顺利运作。

public void mouseDown(MouseDownEvent event)
    {
                isMouseDown = true;
                event.preventDefault();

                xoffset = event.getX();
                yoffset = event.getY();

                Event.setCapture(panel.getElement());
    }
      public  void mouseMove(MouseMoveEvent event) {
            int = event.getX();
            int y = event.getY();    

            float left = panel.getAbsoluteLeft();
            float top = panel.getAbsoluteTop();

            float offset_XX = x - xoffset;
            float offset_YY = y - yoffset;


            panel.getElement().getStyle().setProperty("position", "absolute");


            float newLeft = left + offset_XX;

            if (isMouseDown) {

            if (newLeft < scrollPanel.getAbsoluteLeft()   ) {


                offset_XX =   offset_XX - Math.abs(scrollPanel.getAbsoluteLeft() -panel.getAbsoluteLeft());
                if (Math.abs(offset_XX) > Math.abs(scrollPanel.getOffsetWidth() - panel.getOffsetWidth())) {
                    if (offset_XX > 0 )
                        offset_XX = Math.abs(scrollPanel.getOffsetWidth() - panel.getOffsetWidth());
                    else
                        offset_XX = -Math.abs(scrollPanel.getOffsetWidth() - panel.getOffsetWidth());
                }
                panel.getElement().getStyle().setPropertyPx("left", (int)offset_XX);
            }
            float newtop = top + offset_YY;
            if (newtop < scrollPanel.getAbsoluteTop()) {

                offset_YY =   offset_YY - Math.abs(scrollPanel.getAbsoluteTop() -panel.getAbsoluteTop());
                if (Math.abs(offset_YY) > Math.abs(scrollPanel.getOffsetHeight() - panel.getOffsetHeight())) {
                    if (offset_YY > 0 )
                        offset_YY = Math.abs(scrollPanel.getOffsetHeight() - panel.getOffsetHeight());
                    else
                        offset_YY = -Math.abs(scrollPanel.getOffsetHeight() - panel.getOffsetHeight());
                }
                panel.getElement().getStyle().setPropertyPx("top", (int)offset_YY);
            }

            }
        }

1 个答案:

答案 0 :(得分:0)

长话短说,你的拖拽代码中有太多的计算和DOM调用。我建议您在实施com.google.gwt.logging.client.LoggingPopup后,将GWT团队的解决方案纳入可拖动/可调整大小的面板。它非常快速,优雅,易于理解和使用。您可以在此处获取代码https://github.com/stephenh/google-web-toolkit/blob/master/user/src/com/google/gwt/logging/client/LoggingPopup.java