我的問題是,GWT中的事件預覽與事件處理程序有什麼不同。GWT事件預覽與事件處理程序
還有一個用於事件預覽的回調函數boolean onEventPreview(Event event)
以及一個回調函數void onBrowserEvent(Event event)
。它們非常相似,所以它們有什麼不同?特別是當事件處理程序工作完美時,我應該使用事件預覽嗎?
感謝
我的問題是,GWT中的事件預覽與事件處理程序有什麼不同。GWT事件預覽與事件處理程序
還有一個用於事件預覽的回調函數boolean onEventPreview(Event event)
以及一個回調函數void onBrowserEvent(Event event)
。它們非常相似,所以它們有什麼不同?特別是當事件處理程序工作完美時,我應該使用事件預覽嗎?
感謝
DOM.addEventPreview(EventPreview preview)
可讓您在事件堆棧頂部放置事件預覽,在任何onBrowserEvent(Event event)
被觸發之前調用事件堆棧。這樣,您可以在事件觸發發生之前放置一些邏輯。你甚至可以通過返回false來防止事件發生。例如下面的例子阻止瀏覽器反應,鼠標移動和的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;
}
});
只是一個提醒,加入eventPreviews這樣折舊。正確的方法是使用Event.addNativePreviewHandler(NativePreviewHandler handler)
根據JavaDoc:
只要這個預覽保留在堆棧的頂部,它將接收所有的事件,他們被解僱了他們的聽衆面前。請注意,事件預覽將接收所有事件,包括由於冒泡而收到的事件,而普通事件處理程序僅接收顯式沉沒事件。
您可以從onEventPreview
返回false就取消事件,在這種情況下,事件處理程序不會被解僱。