2013-04-08 64 views
0

我是相當新的ActionScript 3(所以我很抱歉,如果這是一個天真的問題),我正在一個現有的項目使用「樹」菜單。樹中的每個節點代表應用程序中的一個部分。不幸的是,一些節名(節點的顯示值中顯示的內容)相當長,需要截斷文本。因此,有時會切斷部分名稱。爲了解決這個問題,我們希望讓用戶能夠通過將鼠標光標移動到節點上「X」秒來查看整個標題,在這種情況下,小彈出窗口呈現節點的標籤。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 
} 

感謝所有提前!

回答

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秒後將運行一個函數來顯示彈出窗口。

+0

我只注意到你正在使用List類。我之前沒有用過這些工具,但我相信在onListItemRollover方法中使用計時器仍然是您想要做的。 – 2013-04-08 18:25:10

+0

感謝您的回覆,歡迎!非常感激。我會給這個鏡頭。但是,如果鼠標不再在列表項上,計時器的完整事件是否仍然會被觸發?意思是,如果我將鼠標懸停在某個節點上,然後在定時器完成之前將其從節點上移開,則「showPopup()」仍將被調用? – arctek 2013-04-08 18:34:11

+0

我已根據您的後續問題更新了代碼。試試看。 – 2013-04-08 18:54:31