0

我创建了一个建议框并生成了带有大文本的 HTML 页面,因此我可以滚动。1. 显示建议列表 2. 滚动页面

带有建议列表的弹出框随着滚动页面移动,但我希望它既不会在页面滚动时隐藏,也不会随着页面移动。

据我了解,建议弹出窗口具有绝对位置。但是是否有一些非 CSS 解决方案。


回答:

我已经尝试将滚动处理程序添加到Window,但我发现只有在我拥有两个卷轴并且它们的右侧移动时才处理事件,仅在这种情况下。如果我有一个滚动页面来滚动页面,就像在大文本的情况下一样 - 没有任何调用

4

1 回答 1

1

构建 a 时SuggestBox,您可以提供自己的SuggestOracle,TextBoxSuggestionDisplay. DefaultSuggestionDisplay可用于隐藏建议列表。你可以在Window.scrollHandler.

这是代码:

MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();
oracle.add("one");
oracle.add("two");
oracle.add("three");

TextBox box = new TextBox();
final DefaultSuggestionDisplay display = new DefaultSuggestionDisplay();

SuggestBox suggestBox = new SuggestBox(oracle, box, display);

Window.addWindowScrollHandler(new ScrollHandler() {
    @Override
    public void onWindowScroll(ScrollEvent event) {
        display.hideSuggestions();
    }
});

请注意,您需要使用DefaultSuggestionDisplay- 请参阅有关已弃用的 hideSuggestionList方法的文档。

我希望这个例子能解释一切。

我还检查过,如果你不使用自己的SuggestionDisplay,它DefaultSuggestionDisplay无论如何都会使用。所以你可以做得更简单。

((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions();

编辑:

如果不是滚动整个窗口,而是仅滚动某个面板的内容,您可以ScrollHandler在面板中添加一个:

panel.addDomHandler(new ScrollHandler() {
    @Override
    public void onScroll(ScrollEvent event) {
        ((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions();
    }
}, ScrollEvent.getType());
于 2016-09-29T07:58:11.067 回答