Flex HTMLLoader组件不会为所有鼠标点击提升mouseDown事件

时间:2010-06-16 02:16:24

标签: flex actionscript-3 air flex4

我已经使用Flash Builder 4构建了Air 2 / Flex 4信息亭应用程序。目前我正在实施一个触摸屏浏览器,以便用户浏览公司培训视频。 为了提高触摸屏上网站的可用性,我将HTML组件放在Doug McCune的DragScrollingCanvas(更新为使用flex 4'Scroller'组件)中,以允许用户滚动网页将手指拖过屏幕。 mouseDown事件用于开始滚动视口。 此外,网页已修改为使用以下css禁用文本选择:

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

我面临的问题是,如果点击网页上的链接/输入/按钮,则HTMLLoader组件仅触发mouseDown,而不是在单击背景或任何文本时触发。

此外,如果删除自定义css,则在选择文本时不会触发mouseDown事件,但如果单击以前突出显示的文本,则会触发。

作为替代方案,我还尝试添加一个与HTMLLoader具有相同尺寸的组容器来检测mouseDown事件(以便组容器和HTMLLoader具有相同的可拖动父容器)并且能够捕获mouseDown事件并滚动视口预期。但是,由于鼠标事件由组容器处理,我现在无法浏览网页。

有人知道为什么HTMLLoader组件没有为所有鼠标点击提升mouseDown事件吗?

2 个答案:

答案 0 :(得分:1)

还有另一种解决问题的方法,只是为htmlLoader的父级添加鼠标按下事件监听器。将useCapture参数设置为true。

parent.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, true);

答案 1 :(得分:0)

我遇到了同样的问题,解决这个问题的方法是在加载网页完成时编写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>