首先我要达到的效果是这样:TextField中的一段字符串有下划线,并且鼠标移动到这个字符串上面的时候是手形的,点击后Flash可以捕获到这个事件,并且这个事件中还能得到一个关于这个字符串的特定的值。
实现是这样,TextField有一个属性是htmlText,可以通过对这个属性进行赋值来达到显示html的效果。
在官方的说明中有这样一段话:
<a>
标签创建超文本链接并支持以下属性:
target
:指定加载页面的目标窗口的名称。选项包括_self
、_blank
、_parent
和_top
。_self
选项指定当前窗口中的当前帧,_blank
指定一个新窗口,_parent
指定当前帧的父级,而_top
指定当前窗口中的顶级帧。href
:指定 URL 或 ActionScriptlink
事件。URL 可以是绝对路径或相对路径(相对于加载页的 SWF 文件的位置)。http://www.adobe.com
示例表示对 URL 的绝对引用;/index.html
示例表示相对引用。绝对 URL 必须以 http:// 为前缀,否则 Flash 会将其视为相对 URL。可以使用link
事件使链接执行 SWF 文件中的 ActionScript 函数,而不是打开 URL。若要指定link
事件,请在href
属性中使用 event 方案,而不是 http 方案。例如,使用href="event:myText"
而不是href="http://myURL"
;当用户单击包含 event 方案的超文本链接时,文本字段将调度link
TextEvent,并将其text
属性设置为“myText
”。可随后创建一个 ActionScript 函数,每次调度 link TextEvent 时都会执行该函数。还可以使用样式表为锚标签定义a:link
、a:hover
和a:active
样式。
也就是说如果不是超级链接的话,可以自定义一个事件TextEvent,这个事件有一个属性是text,而这个text不是href="event:myText"中的myText
请看以下的测试代码:
var txt:TextField = new TextField(); txt.htmlText = "<u><a href='event:My TextEvent'>My TextEvent</a></u>"; txt.addEventListener(TextEvent.LINK, onLink); addChild(txt); function onLink(e:TextEvent):void { trace(e.text); }
点击后输出为:
My TextEvent
如果通过此事件得到一个特定的值,可以用字典做一个映射,看代码:
var map:Dictionary = new Dictionary(); var txt:TextField = new TextField(); map["My TextEvent"] = "Hello"; txt.htmlText = StringUtil.substitute("<u><a href='event:{0}'>My TextEvent</a></u>", "My TextEvent"); txt.addEventListener(TextEvent.LINK, onLink); addChild(txt); function onLink(e:TextEvent):void { trace(map[e.text]); }
输出为:
Hello