如何实现CSS3 GWT TransitionEnd Listener

时间:2011-12-13 17:34:38

标签: javascript gwt javascript-events css3 css-transitions

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

rub:GWT 2.4不支持 DOM.setEventListener supported event types中的此事件。我尝试使用:

DOM.sinkBitlessEvent(element, "transitionend");

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

  • 的dragenter
  • dragexit
  • 的dragover

因此,如果没有编写Native事件处理程序JSNI代码,这会使我开启memory leaks,那么如何监听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;
  }-*/

1 个答案:

答案 0 :(得分: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);
    }
}

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