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);
}
}
非常感谢您!我会试试看,谢谢你的时间和解决方案! – user7083079
它运作良好!谢谢,亚当! – user7083079
很好的答案,接受它,再次感谢! – user7083079