2016-11-22 184 views
0

我有兩個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 S中滾動了落後。

我附帶的解決方案是滾動右側面板只有當鼠標結束左側面板(且反之亦然)。採用這種方法,兩個面板都能順利滾動。

這裏是工作的完整示例代碼:

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