我创建了一个建议框并生成了带有大文本的 HTML 页面,因此我可以滚动。1. 显示建议列表 2. 滚动页面
带有建议列表的弹出框随着滚动页面移动,但我希望它既不会在页面滚动时隐藏,也不会随着页面移动。
据我了解,建议弹出窗口具有绝对位置。但是是否有一些非 CSS 解决方案。
回答:
我已经尝试将滚动处理程序添加到Window,但我发现只有在我拥有并且它们的右侧移动时才处理事件,仅在这种情况下。如果我有一个滚动页面来滚动页面,就像在大文本的情况下一样 - 没有任何调用
构建 a 时SuggestBox
,您可以提供自己的SuggestOracle
,TextBox
和SuggestionDisplay
. 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());