2016-11-18 3 views
0

私はGWTアプリケーションを実装しています。スクロールパネル、画像を含むフローパネル、スクロールパネルのフローパネルをマウスの下/GWTのドラッグを実装すると、topにCSS setPropertyを使用するとうまく動作しない

左(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); 
      } 

      } 
     } 

答えて

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

関連する問題