2011-12-13 185 views
4

我想使用transitionend Mozilla CSS3屬性在CSS3轉換完成時觸發事件。我知道我可以使用定時器來實現類似的功能,但本着CSS3動畫的精神,我們將其交給瀏覽器。這是此次活動的example如何實現CSS3 GWT TransitionEnd監聽器

摩擦:GWT 2.4不支持此事件,在DOM.setEventListenersupported event types。我試着使用:

DOM.sinkBitlessEvent(element, "transitionend"); 

但使用調試器的發現,它僅支持(通過重新綁定):

  • 的dragenter
  • dragexit
  • 的dragover
  • 下降

因此,缺少編寫本機事件處理程序JSNI代碼,這使我可以打開memory leaks,如何在GWT中的GWT中的元素上偵聽事件?下面

僅供參考,就是GWT 2.3建立了gecko_1.8排列在DomImplStandard.java

protected native void sinkBitlessEventImpl(Element elem, String eventTypeName) /*-{ 
    if (eventTypeName == "dragenter") 
     elem.ondragenter = @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent; 
    if (eventTypeName == "dragexit") 
     elem.ondragexit = @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent; 
    if (eventTypeName == "dragover") 
     elem.ondragover = @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent; 
    if (eventTypeName == "drop") 
     elem.ondrop  = @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent; 
    }-*/ 

回答

1

它的接縫mgwt管理轉移事件(等等)。他們用自己的版本替換com.google.gwt.user.client.impl.DOMImpl。請參閱module descriptor。 但看他們的DOMImpl之一(如:DOMImplMobileSafari),他們編寫本機事件處理程序:

//transistion end 
if (chMask & 0x8000000) { 
    if(bits & 0x8000000){ 
     elem.addEventListener('webkitTransitionEnd', @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent, false); 
    } 
} 

我不明白他們是如何管理內存泄漏。

+0

您將如何使用此機會來處理實際客戶端代碼中的事件? – alexp 2014-11-05 01:38:18