2016-11-22 19 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

 Смежные вопросы

  • Нет связанных вопросов^_^