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