GWT禁用鼠标滚轮滚动了滚动面板

问题描述:

我有两个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); 

当滚动在左侧,右侧移动到相同的垂直位置,然而,然后左侧的举动再次本身(向下滚动),所以右侧似乎滞后,不能在同一时间。它似乎左侧运行默认滚动鼠标滚轮事件。如何禁用它或以其他方式让它们在同一时间垂直滚动?感谢帮助?

我觉得我已经成功地重现您的问题。当我只在左侧面板上有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