Actionscript 3 ActionScript 3树-鼠标悬停“后弹出节点值”;X";秒

Actionscript 3 ActionScript 3树-鼠标悬停“后弹出节点值”;X";秒,actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,我是ActionScript3的新手(如果这是一个幼稚的问题,我很抱歉),我正在处理一个使用“树”菜单的现有项目。树中的每个节点表示应用程序中的一个部分。不幸的是,某些节名称(即节点显示值中显示的名称)相当长,需要截断文本。因此,有时节名称会被截断。为了解决这个问题,我们希望让用户能够通过将鼠标光标在节点上移动“X”秒来查看整个标题,在这种情况下,一个小弹出窗口将呈现节点的标签 示例 public var menuTree:Tree; public function DoSomething()

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

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

我刚刚注意到您使用的是一个列表类。我以前没有使用过这些方法,但我相信在onListItemRollover方法中使用计时器仍然是您想要做的。感谢您的回复,greetification!非常感谢。我来试一试。但是,如果鼠标不再位于列表项上方,计时器的完整事件是否仍会被触发?也就是说,如果我将鼠标悬停在某个节点上,然后在计时器完成之前将其移出该节点,则仍将调用“showPopup()”?我已根据您随后的问题更新了代码。试试看。非常感谢你的问候!这起作用了。再次感谢!