问题描述
|
var newParagraph : ParagraphElement = new ParagraphElement();
var icon : InlineGraphicElement = MY_ICON;
// icon.toolTip = \"boo\" ????
newParagraph.addChild( icon );
我想要一个用于\“ icon \”的特定工具提示。我已经阅读过有关使用HTML和rollover和rollOut的知识(例如,谢谢,先生),但是我正在将其构建为更大的文本块的一部分;很难从增量对象切换到中间的HTML。
如果无法在图标上设置事件,是否可以在ActionScript中创建HTML位作为段落的一部分(但不是全部)?
干杯
解决方法
我只是遇到了同样的问题。
我找到的最简单的解决方案是将InlineGraphicElement包装在LinkElement中。
LinkElement已经分派了鼠标事件。
, 问题(如我所确定的那样)是文本流元素不是显示对象,因此不能实现正常的显示对象行为。
您需要做的是创建一个自定义InlineGraphicElement来附加所需的事件侦听器,然后从textFlow实例中调度一个事件,以便可以在您的显示对象层次结构中的某个位置读取该事件(或您选择的针对该对象的任何方法)事件)。
通过查看LinkElement的源代码,您可以看到一个如何添加鼠标交互的好例子(请参阅createContentElement函数)。
不幸的是,InlineGraphicElement被标记为final,因此您需要复制它的功能而不是对其进行扩展。只要确保在代码中使用自定义图形元素来代替普通元素即可。
祝你好运!
编辑
以防万一,您可以通过将侦听器附加到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>
然后侦听整个textcomponent上的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\');
}
}