我的问题是,在GWT中事件预览和事件处理程序之间有何不同。
有一个回调函数boolean onEventPreview(Event event)
用于事件预览,还有一个回调函数void onBrowserEvent(Event event)
。它们非常相似,所以它们之间有什么区别?特别是当事件处理程序完美工作时,何时应使用事件预览?
谢谢
DOM.addEventPreview(EventPreview preview)
允许您在事件堆栈顶部放置一个事件预览,该预览在任何onBrowserEvent(Event event)
被触发之前调用。这样,您可以在事件触发之前放置一些逻辑。甚至可以通过返回false来防止事件触发。例如,下面的示例防止浏览器对mousemove和mousedown事件做出反应。 (单击并拖动图像,浏览器不会拖动图像的轮廓)
DOM.addEventPreview(new EventPreview() {
@Override
public boolean onEventPreview(Event event) {
switch (DOM.eventGetType(event)){
case Event.ONMOUSEDOWN:
case Event.ONMOUSEMOVE:
event.preventDefault();
}
return true;
}
});
Event.addNativePreviewHandler(NativePreviewHandler handler)
。来自 javadoc:
只要此预览保持在堆栈顶部,它将在事件被发送到其侦听器之前接收所有事件。请注意,事件预览将接收所有事件,包括由于冒泡而接收的事件,而普通事件处理程序仅接收明确下沉的事件。
您可以从 onEventPreview
返回 false 以取消事件,在这种情况下,事件处理程序将不会被触发。