【问题标题】:How to Implement CSS3 GWT TransitionEnd Listener如何实现 CSS3 GWT TransitionEnd 监听器
【发布时间】:2011-12-13 17:34:38
【问题描述】:

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

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

DOM.sinkBitlessEvent(element, "transitionend");

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

  • dragenter
  • dragexit
  • dragover
  • drop

所以,如果没有编写原生事件处理程序 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;
  }-*/

【问题讨论】:

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


    【解决方案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);
        }
    }
    

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

    【讨论】:

    • 您将如何利用这个机会来处理实际客户端代码中的事件?
    猜你喜欢
    • 2011-08-21
    • 2011-02-02
    • 1970-01-01
    • 2019-04-01
    • 2012-06-06
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多