【问题标题】:GWT Disable mouse wheel scrolling for Scroll PanelGWT 禁用滚动面板的鼠标滚轮滚动
【发布时间】:2016-11-22 21:08:54
【问题描述】:

我有两个滚动面板,尝试实现它们同时垂直滚动,代码如下

//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);  

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

【问题讨论】:

    标签: gwt vertical-scrolling


    【解决方案1】:

    我想我已经设法重现了您的问题。当我在左侧面板上只有ScrollHandler 时,右侧面板正在平滑滚动。但是当我有 ScrollHandlers 在左右面板上滚动滞后。

    我提出的解决方案是仅当鼠标悬停在左侧面板上时才滚动右侧面板(反之亦然)。使用这种方法,两个面板都可以平滑滚动。

    这是一个完整的示例代码:

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

    【讨论】:

    • 非常感谢!我会试试的,感谢您的时间和解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多