0

fl.controls.ScrollPane我有一个用作Sprite表单容器的 Flash 应用程序。被ScrollPane.source引用为Sprite表单的flash.text.TextField一些子表单。

我使用 Firefox 和 Chrome 浏览器进行了测试。

当从开发服务器直接调用 flash 文件时,flash 应用程序运行正常,只是需要单击两次才能选择可编辑的TextField.

当 Flash 嵌入到具有严格控制属性的页面时,情况会变得更糟,例如:

<embed type="application/x-shockwave-flash"
src="https://localhost:flashfile.swf" width="400" height="300"
quality="high" scale="scale" allowfullscreen="true"
allowscriptaccess="never" salign="tl" wmode="opaque">

我读到这wmode=opaque会带来一些不良的副作用,但很荒谬,我什至无法选择TextField对象。事件鼠标滚动不再被捕获。鼠标事件没有击中TextField对象。

这是一个特殊情况,因为其他对象(例如fl.controls.CheckBoxfl.controls.ComboBox)仍然可以单击/选择。

问题:在这个特殊的场景ScrollPane和嵌入使用wmode=opaque中,我在这里错过了什么?

4

1 回答 1

1

在网上搜索了半天,并梳理了AS3文档直到我的眼睛都瞎了,我终于找到了解决我问题的提示。我只是在这里做一个大脑转储来解决TextField选择问题。

很多搜索结果都暗示wmode=opaque了浏览器控制鼠标事件以及如何控制鼠标事件的问题,但没有多少找到直接的答案或解决方案。

http://www.actionscript.org/forums/showthread.php3?t=170310

上面的论坛问题给出了一个提示,该ScrollPane对象实际上捕获了第一次鼠标单击以获得焦点,然后让后续单击进入子对象。给出的tip如图:

myScrollPane.focusEnabled = false

focusEnabled属性设置为false.

为了完整起见,我明确设置了更多属性以确保:

mouseFocusEnabled = false; // disable mouse focus on the scrollpane
focusEnabled = false; // disable focus on the scrollpane
mouseEabled = true; // receives mouse input
mouseChildren = true; // enable for selecting children objects

奇迹般地,我的点击能够在TextField使用嵌入闪存时选择可编辑对象wmode=opaque(我仍然不确定这是否是问题)。

然而,鼠标滚动事件似乎只能通过外部 javascript 解决。没有内部 AS3 解决方案。

也就是说,未回答的问题是:我仍然不确定 Web 浏览器在何处或如何捕获鼠标事件,然后有选择地将它们传递到嵌入式 Flash 容器中。如果有人可以阐明这一点,并指出一些解决方案,那就太好了。

于 2013-05-14T00:20:21.977 回答