Компонент Flex HTMLLoader, не вызывающий события mouseDown для всех щелчков мыши - PullRequest
1 голос
/ 16 июня 2010

Я создал приложение для киосков Air 2 / Flex 4 с помощью Flash Builder 4. В настоящее время я внедряю браузер с сенсорным экраном, чтобы пользователи могли просматривать обучающие видеоролики компании. В попытке улучшить удобство использования веб-сайта на сенсорном экране, я поместил компонент HTML в адаптацию DragScrollingCanvas Дуга МакКуна (обновлена ​​для использования компонента flex 4 'Scroller'), чтобы пользователи могли прокручивать веб-страницы, проводя пальцем по экрану. Событие mouseDown используется для запуска прокрутки области просмотра. Кроме того, веб-страница была изменена, чтобы отключить выделение текста со следующим css:

html {
    -webkit-user-select: none;
    cursor: default;
}

Проблема, с которой я сталкиваюсь, заключается в том, что компонент HTMLLoader запускает mouseDown только при нажатии ссылки / ввода / кнопки на веб-странице, а не при нажатии на фон или любой текст.

Кроме того, если я удаляю пользовательский css, событие mouseDown не будет срабатывать при выделении текста, но будет происходить, если щелкнуть ранее выделенный текст.

В качестве альтернативы я также попытался добавить контейнер группы с теми же размерами, что и HTMLLoader, чтобы обнаружить события mouseDown (чтобы у контейнера группы и HTMLLoader был один и тот же родительский контейнер Dragable), и мог захватывать события mouseDown и прокручивать окно просмотра, как и ожидалось. Однако, поскольку событие мыши обрабатывается контейнером группы, теперь я не могу перемещаться по веб-странице.

Кто-нибудь знает, почему компонент HTMLLoader не вызывает события mouseDown для всех щелчков мыши?

Ответы [ 2 ]

1 голос
/ 20 августа 2010

Существует и другой способ решения проблемы, только добавление прослушивателя событий нажатия мыши для родителя htmlLoader.установите для параметра useCapture значение true.

parent.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, true);
0 голосов
/ 02 августа 2010

Я столкнулся с той же проблемой, способ решить эту проблему - написать javascript после завершения загрузки веб-страницы.

Я делаю это так:

<mx:HTML id="html" ... >
  <mx:complete>
    var document:Object = html.htmlLoader.window.document;
    var body:Object = document.getElementsByTagName("body");
    body[0].onmousedown = function(o:Object):void
    {
      trace("mouseDown");
      ...
    }
  </mx:complete>
</mx:HTML>
...