我对ActionScript 3相当陌生(所以我很抱歉,如果这是一个naïve问题),我正在研究一个使用"树"菜单的现有项目。树中的每个节点表示应用程序中的一个部分。不幸的是,一些节名(即在节点的显示值中显示的内容)相当长,需要截断文本。因此,有时会切断部分名称。为了解决这个问题,我们希望让用户能够通过将鼠标光标移动到节点上"X"秒来查看整个标题,在这种情况下,一个小弹出窗口会呈现节点的标签。
public var menuTree:Tree;
public function DoSomething(){
menuTree.addEventListener(ListEvent.ITEM_ROLL_OVER, onListItemRollover, false, 100);
}
private function onListItemRollover(event:ListEvent):void {
//IF MOUSE CURSOR IS STILL OVER NODE FOR "X" SECONDS DISPLAY NODE'S LABEL IN POP-UP
}
提前感谢大家!
在不了解您的设置的情况下,我可能会这样设置:
var timer:Timer;
var currentItem:*
for each (var node:* in menuTree) {
node.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
node.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
}
function overHandler(event:MouseEvent):void {
stopTimer();
currentItem = event.currentTarget;
timer = new Timer(2000, 1);
timer.addEventListener(TimerEvent.TIMER, showPopup);
timer.start();
}
function outHandler(event:MouseEvent):void {
stopTimer();
}
function showPopup(timerEvent:TimerEvent):void {
stopTimer();
//show popup code here
//use currentItem
}
function stopTimer():void {
if (timer) {
timer.stop();
timer.removeEventListener(TimerEvent.TIMER, showPopup);
}
}
因此,不是将事件侦听器添加到菜单树中,而是循环遍历树中的每个项目,并为该项目添加侦听器。然后,当用户滚动到任何给定的项目时,它会启动一个计时器,在2秒后将运行一个函数来显示弹出