Как реализовать CSS3 GWT TransitionEnd Listener - PullRequest
4 голосов
/ 13 декабря 2011

Я хочу использовать transitionend Mozilla CSS3 для запуска событий, когда переход CSS3 завершен. Я знаю, что мог бы использовать таймеры для аналогичной функциональности, но в духе анимации CSS3 давайте передадим это браузеру. Вот пример этого события в действии.

Проблема: GWT 2.4 не поддерживает это событие в DOM.setEventListener поддерживаемых типах событий . Я пытался использовать:

DOM.sinkBitlessEvent(element, "transitionend");

Но с помощью отладчика выяснилось, что он поддерживается только (через повторное связывание):

  • DragEnter
  • dragexit
  • DragOver
  • капля

Итак, если не считать собственный обработчик событий JSNI код, который открывает мне до утечек памяти , как можно прослушивать событие в элементе в 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 Ответ

1 голос
/ 12 марта 2013

Это показывает, что 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);
    }
}

Я не понимаю, как они справляются с утечками памяти.

...