1
var newParagraph : ParagraphElement = new ParagraphElement();

var icon : InlineGraphicElement = MY_ICON;
//   icon.toolTip = "boo"  ????
newParagraph.addChild( icon );

我想要一个“图标”的特定工具提示。我已经阅读了有关使用 HTML 和 rollOver 和 rollOut 的信息(例如,谢谢,先生),但我将其构建为更大文本块的一部分;中间很难从增量对象切换到 HTML。

如果我无法在图标上设置事件,是否可以在 ActionScript 中创建一个 HTML 位作为段落的一部分(但不是全部)?

干杯

4

3 回答 3

2

我刚刚遇到了同样的问题。

我找到的最简单的解决方案是将我的 InlineGraphicElement 包装在 LinkElement 中。

LinkElement 已经分派了鼠标事件。

于 2011-12-22T10:52:28.720 回答
1

问题(我相信您已经发现)是文本流元素不是显示对象,因此不实现正常的显示对象行为。

您需要做的是创建一个自定义 InlineGraphicElement 来附加您需要的事件侦听器,然后从 textFlow 实例中分派一个事件,以便可以在您的显示对象层次结构中的某个位置读取它(或者您选择的任何目标方法)事件)。

您可以通过查看LinkElement的源代码来查看如何添加鼠标交互的一个很好的示例(请参阅 createContentElement 函数)。

不幸的是,InlineGraphicElement被标记为 final,因此您需要复制它的功能而不是扩展它。只需确保在您的代码中使用自定义图形元素来代替正常的图形元素。

祝你好运!

编辑

以防万一丢失了这一点,其想法是您可以通过将侦听器附加到 textFlow 来捕获应用程序中某处的鼠标事件,然后使用标准方法以编程方式创建工具提示并将其放置在元素上以查找边界一个文本流元素。

于 2011-05-27T23:04:52.603 回答
1

当鼠标悬停在 textflow 组件上时,您可以进行一些命中测试。

假设您有一些这样的文本流:

<s:RichEditableText width="100%" height="100%" mouseOver="toggleTooltip()">
    <s:textFlow>
        <s:TextFlow>
            <s:p>
                <s:span>Some text before</s:span>
                <s:img id="myImg" source="myImg.png" />
                <s:span>Some text after</s:span>
            </s:p>
        </s:TextFlow>
    </s:textFlow>
</s:RichEditableText>

然后你在整个文本组件上监听 mouseOver 事件。

然后测试鼠标是否在你的图像上,实现 mouseOver 处理程序:

private function toggleTooltip():void {
    var graphic:DisplayObject = myImg.graphic;
    var anchor:Point = graphic.localToGlobal(new Point(0, 0));

    if (mouseX >= anchor.x && mouseX <= anchor.x + graphic.width &&
        mouseY >= anchor.y && mouseY <= anchor.y + graphic.height) 
    {
        trace('show tooltip');
    }
    else {
        trace('hide tooltip');
    }
}
于 2011-05-27T23:35:24.393 回答