0

我对 ActionScript 3 相当陌生(如果这是一个幼稚的问题,我很抱歉),我正在处理一个使用“树”菜单的现有项目。树中的每个节点代表应用程序中的一个部分。不幸的是,某些部分名称(显示在节点的显示值中)相当长,需要截断文本。因此,有时节名称会被截断。为了解决这个问题,我们希望让用户能够通过将鼠标光标在节点上移动“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
}

提前谢谢大家!

4

1 回答 1

2

在不了解您的设置的情况下,我可能会设置如下内容:

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);
  }
}

因此,不是将事件侦听器添加到 menuTree,而是要循环遍历树中的每个项目并向该项目添加一个侦听器。然后,当用户滚动任何给定项目时,它会启动一个计时器,该计时器会在 2 秒后运行一个函数来显示弹出窗口。

于 2013-04-08T18:23:01.400 回答