如何实现 CSS3 GWT TransitionEnd 监听器

Jos*_*ust 5 javascript css gwt dom-events css-transitions

我想使用transitionend Mozilla CSS3 属性在 CSS3 过渡完成时触发事件。我知道我可以使用计时器来实现类似的功能,但本着 CSS3 动画的精神,让我们将其交给浏览器。以下是此事件的示例

问题:GWT 2.4 在DOM.setEventListener 支持的事件类型中不支持此事件。我尝试使用:

DOM.sinkBitlessEvent(element, "transitionend");
Run Code Online (Sandbox Code Playgroud)

但是使用调试器发现它只支持(通过重新绑定):

  • dragenter
  • dragexit
  • dragover
  • drop

因此,缺少编写本机事件处理程序JSNI代码,这让我容易出现内存泄漏,如何监听 GWT 中不受 GWT 开箱即用支持的元素上的事件?

作为参考,以下是 GWT 2.3 为 DomImplStandard.java 中的 gecko_1.8 排列构建的内容

  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;
  }-*/
Run Code Online (Sandbox Code Playgroud)

mak*_*roo 2

看起来mgwt管理过渡事件(等等)。他们用自己的版本替换 com.google.gwt.user.client.impl.DOMImpl。请参阅模块描述符。但是看看他们的 DOMImpl 之一(例如DOMImplMobileSafari),他们编写了一个本机事件处理程序:

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

我不明白他们如何管理内存泄漏。