GWT 滚动处理程序



我有这个代码

@Inject
@DataField("table-col")
SimplePanel tableContainer;
@PostConstruct
public void build() {
    scroll(tableContainer.getElement(), this);
    tableContainer.addHandler(new ScrollHandler() {
        @Override
        public void onScroll(ScrollEvent scrollEvent) {
            // TODO - Does not trigger
            Window.alert("Scroll");
        }
    }, ScrollEvent.getType());
}

我的问题是,为什么当类似的Javascript(JSNI(处理程序工作时,tableContainer滚动处理程序现在确实有效:

public static native void scroll(Element elem, TablePage instance) /*-{
       $wnd.$( elem ).scroll(function() {
            if (elem.scrollTop >= (elem.scrollHeight - elem.offsetHeight)) {                    
                instance.@com.mygwtapp.app.TablePage::scrolledToBottom()();
            }
        });
}-*/;

这里可能出了什么问题?

> SimplePanel实际上并不侦听ScrollEvent,如果您想要一个支持滚动的面板,您可以使用ScrollPanel(这是一个支持滚动的简单面板(。

ScrollPanel scrollPanel = new ScrollPanel();
scrollPanel.addScrollHandler(new ScrollHandler() {
    @Override
    public void onScroll(ScrollEvent scrollEvent) {
        // TODO - Does not trigger
        Window.alert("Scroll");
    }
});

在第二种方式中,您实际上是将事件添加到元素本身,并等待事件从浏览器触发以调用您的处理程序。在这两种方式中,事件都是从浏览器触发的,但第一个事件实际上并不侦听它,而第二个事件会侦听它。

相关内容

最新更新