For循環包含一個事件監聽器函數。但循環迭代比偵聽器函數更快。在偵聽器函數完成之前,下一次迭代開始。如何處理這個?如何管理for循環中的事件偵聽器?
0
A
回答
1
聽起來像你不需要一個「for」循環。
根據你的描述,它看起來像你需要某種形式的事件鏈的第一個事件完成後,你建立了一個新的偵聽器等等...
1
如果你要找的答案是帕特里克所描述的,我已經創建的如何實現它的一個例子:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Main extends Sprite
{
private var _queue:Queue;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var queueItems:Vector.<QueueItem> = new Vector.<QueueItem>();
for (var i:uint = 0; i < 5; i++)
{
var timer:Timer = new Timer(2 * 1000, 1);
queueItems.push(new QueueItem(timer, TimerEvent.TIMER_COMPLETE, onTimerComplete));
}// end for
_queue = new Queue(queueItems);
var currentTimer:Timer = Timer(_queue.currentQueueItem.eventDispatcher);
currentTimer.start();
_queue.shift();
}// end function
private function onTimerComplete(e:TimerEvent):void
{
if (_queue.currentQueueItem)
{
var currentTimer:Timer = Timer(_queue.currentQueueItem.eventDispatcher);
currentTimer.start();
if (_queue.length > 0) _queue.shift();
}// end if
}// end function
}// end class
}// end package
import flash.events.IEventDispatcher;
import flash.events.Event;
internal class Queue
{
private var _queueItems:Vector.<QueueItem>;
public function get currentQueueItem():QueueItem { return (_queueItems.length > 0) ? _queueItems[0] : null }
public function get length():int { return _queueItems.length }
public function Queue(queueItems:Vector.<QueueItem>)
{
_queueItems = queueItems;
}// end function
public function shift():void
{
var eventDispatcher:IEventDispatcher = _queueItems[0].eventDispatcher;
var type:String = _queueItems[0].type;
var listener:Function = _queueItems[0].listener;
var useCapture:Boolean = _queueItems[0].useCapture;
var priority:int = _queueItems[0].priority;
var useWeakReference:Boolean = _queueItems[0].useWeakReference;
eventDispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
_queueItems.shift();
}// end function
}// end class
internal class QueueItem
{
private var _eventDispatcher:IEventDispatcher;
private var _type:String;
private var _listener:Function;
private var _useCapture:Boolean;
private var _priority:int;
private var _useWeakReference:Boolean;
public function get eventDispatcher():IEventDispatcher { return _eventDispatcher }
public function get type():String { return _type}
public function get listener():Function { return _listener }
public function get useCapture():Boolean { return _useCapture }
public function get priority():int { return _priority }
public function get useWeakReference():Boolean { return _useWeakReference }
public function QueueItem(eventDispatcher:IEventDispatcher, type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false)
{
_eventDispatcher = eventDispatcher;
_type = type;
_listener = listener;
_useCapture = useCapture;
_priority = priority;
_useWeakReference = useWeakReference;
}// end function
}// end class
簡單地說,這將創建類似系統的隊列在隊列的前面添加一個事件監聽器IEventListener
對象,當其加入隊列被移動。
以上顯示瞭如何將其與Timer
對象配合使用。
相關問題
- 1. while循環忽略事件偵聽器
- 2. 使用FOR循環調用事件偵聽器javascript
- 3. 使用for循環創建元素和事件偵聽器
- 4. 附加一個循環內事件偵聽器中反應
- 5. 事件監聽器循環
- 6. AS3環路和事件偵聽器
- 7. For循環中的JQuery事件監聽器
- 8. JavaFX事件/偵聽器/處理程序
- 9. 事件偵聽器如何工作?
- 10. 如何「範圍」事件偵聽器?
- 11. 如何簡化javascript事件偵聽器?
- 12. []如何附加事件偵聽器?
- 13. 事件偵聽器5
- 14. reactjs事件偵聽器window.resize
- 15. ZF3 onRoute事件偵聽器
- 16. 蠟染事件偵聽器
- 17. 事件偵聽器在evently
- 18. TOAD for MySQL中的事件管理器
- 19. - > for循環中的 - >事件偵聽器中的函數是否可以有參數?
- 20. 取消註冊AngularJs(1.x)$ rootScope事件偵聽器不會清理$$偵聽器?
- 21. 在OS X中附加事件偵聽器JavaScript for Automation(JXA)
- 22. 通過for循環將事件監聽器應用於按鈕?
- 23. Selenium - 如何處理與事件偵聽器(C#)彈出
- 24. 事件偵聽器與事件處理程序
- 25. 如何創建只偵聽performSelector:onThread:和GUI事件的運行循環?
- 26. 如何將偵聽器事件添加到Java中的JComboBox中
- 27. 在JPA環境中聲明Hibernate事件偵聽器
- 28. FOR循環中的批處理文件字符串管理
- 29. 瀏覽器和viewer.container事件偵聽器
- 30. 在由php循環創建的獨特行上創建javascript事件偵聽器
得到了一些示例代碼..?無法破譯你的目標。 – Marty 2011-05-05 06:49:54
@ user732251你是什麼意思「循環迭代比偵聽器功能更快」?你的意思是你添加到你的對象的事件監聽器沒有收到一個事件,然後循環中的下一個對象添加了一個事件監聽器?如果您在描述問題時遇到問題,那麼您至少應該張貼一些代碼或描述您的項目的目的。我也很想知道爲什麼你首先需要這種功能。 – Taurayi 2011-05-05 11:59:30
@ user732251應該詳細說明你的問題。提供一些代碼示例,就像你說的「for-loop」可以幫助我們,就像Marty所說的那樣 - 破譯你的目標。 – bigp 2011-05-05 14:12:32