2016-11-22 7 views
0

私はここで、同時に垂直方向にスクロールするためにそれらを実装しようとすると、2 scrollpanelを持っているが、コードGWTを無効にし、マウスホイールのスクロール

//leftSide and rightSide class has scrollPanel 
final ScrollPanel scrollPanelLeft = leftSide.getScrollPanel(); 
final ScrollPanel scrollPanelRight = rightSide.getScrollPanel(); 

leftSide.removeMouseHandlers(); 
leftSide.removeScrollHandler(); 

HandlerRegistration mouseWheelScrollHandler = 
scrollPanelLeft.addDomHandler(new MouseWheelHandler() { 
     @Override 
     public void onMouseWheel(MouseWheelEvent event) { 

      int currentVertPos = 
scrollPanelLeft.getVerticalScrollPosition(); 
      if (!lockSide) 
       scrollPanelRight.setVerticalScrollPosition(currentVertPos); 


     } 
    }, MouseWheelEvent.getType()); 

    leftSide.addScrollHandler(mouseWheelScrollHandler); 

leftSide.addHandler(mouseWheelScrollHandler); 

左側にスクロール、右サイドの動きがありますしかし、同じ垂直位置では、次に左側が再び動き(スクロールダウン)、右側は遅れているように見え、同時にはできませんでした。それは左側のデフォルトスクロールマウスホイールイベントを実行するようだ。それを無効にしたり、同時に上下にスクロールさせる方法はありますか?手伝ってくれてありがとう?

答えて

0

私はあなたの問題を再現することができたと思います。左側のパネルにScrollHandlerしかなかったとき、右側のパネルがスムーズにスクロールしていました。しかし、左パネルと右パネルの両方に ScrollHandlerがあると、スクロールが遅れていました。

私が解決したのは、マウスが左のパネルの上にあるときだけ、右のパネルをスクロールすることでした(その逆もあります)。このアプローチでは、両方のパネルがスムーズにスクロールしていました。ここで

は完全に動作するサンプルコードです:

public class ScrollTest { 

    private boolean mouseOverLeftPanel = false; 
    private boolean mouseOverRightPanel = false; 

    public ScrollTest() { 
     final ScrollPanel scrollPanelLeft = new ScrollPanel(); 
     final ScrollPanel scrollPanelRight = new ScrollPanel(); 

     scrollPanelLeft.setPixelSize(100, 150); 
     scrollPanelRight.setPixelSize(100, 150); 

     VerticalPanel highContentLeft = new VerticalPanel(); 
     for(int i = 0; i < 20; i++) 
      highContentLeft.add(new Label("Label " + Integer.toString(i))); 

     VerticalPanel highContentRight = new VerticalPanel(); 
     for(int i = 0; i < 20; i++) 
      highContentRight.add(new Label("Label " + Integer.toString(i))); 

     scrollPanelLeft.add(highContentLeft); 
     scrollPanelRight.add(highContentRight); 

     // scroll handlers 
     scrollPanelLeft.addScrollHandler(new ScrollHandler() { 
      @Override 
      public void onScroll(ScrollEvent event) { 
       if(mouseOverLeftPanel) 
        scrollPanelRight.setVerticalScrollPosition(scrollPanelLeft.getVerticalScrollPosition()); 
      } 
     }); 

     scrollPanelRight.addScrollHandler(new ScrollHandler() { 
      @Override 
      public void onScroll(ScrollEvent event) { 
       if(mouseOverRightPanel) 
        scrollPanelLeft.setVerticalScrollPosition(scrollPanelRight.getVerticalScrollPosition()); 
      } 
     }); 

     // mouse over handlers 
     scrollPanelLeft.addDomHandler(new MouseOverHandler() { 
      @Override 
      public void onMouseOver(MouseOverEvent event) { 
       mouseOverLeftPanel = true; 
      } 
     }, MouseOverEvent.getType()); 

     scrollPanelRight.addDomHandler(new MouseOverHandler() { 
      @Override 
      public void onMouseOver(MouseOverEvent event) { 
       mouseOverRightPanel = true; 
      } 
     }, MouseOverEvent.getType()); 

     // mouse out handlers 
     scrollPanelLeft.addDomHandler(new MouseOutHandler() { 
      @Override 
      public void onMouseOut(MouseOutEvent event) { 
       mouseOverLeftPanel = false; 
      } 
     }, MouseOutEvent.getType()); 

     scrollPanelRight.addDomHandler(new MouseOutHandler() { 
      @Override 
      public void onMouseOut(MouseOutEvent event) { 
       mouseOverRightPanel = false; 
      } 
     }, MouseOutEvent.getType()); 

     HorizontalPanel wrapper = new HorizontalPanel(); 
     wrapper.add(scrollPanelLeft); 
     wrapper.add(scrollPanelRight); 

     RootPanel.get().add(wrapper); 
    } 
} 
+0

はどうもありがとうございました!私はあなたの時間とソリューションのおかげで、それを試してみましょう! – user7083079

+0

それはうまく動作します!ありがとう、アダム! – user7083079

+0

偉大な答えは、それを受け入れる、ありがとう! – user7083079

関連する問題