IntervalManager, setInterval 的扩展
主要功能: 增加了停止, 暂停 interval 功能 增加了删除所有 interval 的方法 在每次触发 interval 的时候广播事件跟踪, 更高的可扩展性 解决了函数返回值出路的问题 -0-
如何使用
// 首先准备一下 array 的 prototype Array.prototype.remove = function(index) { if (index == 0){ this.shift(); } else if (index == (this.length - 1)){ this.pop(); } else if (index > 0 && index < (this.length - 1) ){ this.splice(index, 1); } } _global.ASSetPropFlags(Array.prototype, "remove", 1, 0);
// 导入包 import MirageSystem.utils.IntervalManager;
function test1 (arg1, arg2) { trace("scope : " + this); trace("arguments.length : " + arguments.length); for (var i in arguments) { trace("arg[" + i + "] : " + arguments[i]); } }
// test2 是带返回值的例子 var test2ReturnValue:String; function test2 () { trace("我是 test2"); return "这里是 test2"; }
// test3 会被无限持续调用, 看看 test2ReturnValue 的改变吧 function test3 () { trace("我是 test3, test2ReturnValue 的结果是 : " + test2ReturnValue); }
function test4 () { trace("我是 test4, 现在暂停 test3"); intervalMgr3.pause(); }
function test5 () { trace("我是 test5, 恢复 test3"); intervalMgr3.start(); }
function test6 () { trace("我是 test6, 释放所有 interval"); IntervalManager.cleanUp();
}
function intervalMgr1_invoke (e:Object) { trace("intervalMgr1.currentCount : " + e.currentCount); } function intervalMgr1_stop (e:Object) { trace("intervalMgr1 已停止"); }
// 设置一个 interval, 第 1 个例子还包括了如何设置侦听器 var intervalMgr1:IntervalManager = IntervalManager.run(test1, 1000, ["arg1", "arg2"], true, 3, this); intervalMgr1.addEventListener(IntervalManager.INVOKE, intervalMgr1_invoke); intervalMgr1.addEventListener(IntervalManager.STOP, intervalMgr1_stop); var intervalMgr2:IntervalManager = IntervalManager.run(test2, 1500, null, false, 1, this, [this, "test2ReturnValue"]); var intervalMgr3:IntervalManager = IntervalManager.run(test3, 100); var intervalMgr4:IntervalManager = IntervalManager.run(test4, 800, null, null, 1); var intervalMgr5:IntervalManager = IntervalManager.run(test5, 1300, null, null, 1); var intervalMgr6:IntervalManager = IntervalManager.run(test6, 5000);
下面是我的运行结果
scope : _level0 arguments.length : 2 arg[1] : arg2 arg[0] : arg1 我是 test3, test2ReturnValue 的结果是 : undefined 我是 test3, test2ReturnValue 的结果是 : undefined 我是 test3, test2ReturnValue 的结果是 : undefined 我是 test3, test2ReturnValue 的结果是 : undefined 我是 test3, test2ReturnValue 的结果是 : undefined 我是 test4, 现在暂停 test3 intervalMgr1.currentCount : 2 scope : _level0 arguments.length : 2 arg[1] : arg2 arg[0] : arg1 我是 test5, 恢复 test3 我是 test3, test2ReturnValue 的结果是 : undefined 我是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 intervalMgr1.currentCount : 3 scope : _level0 arguments.length : 2 arg[1] : arg2 arg[0] : arg1 intervalMgr1 已停止 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test3, test2ReturnValue 的结果是 : 这里是 test2 我是 test6, 释放所有 interval
IntervalManager.as
代码拷贝框
[Ctrl+A 全部选择 然后拷贝]
EventDispatcher.as 就是 mx.event.EventDispatcher -_-
例子和全部代码下载:点击下载
经典论坛讨论帖: http://www.blueidea.com/bbs/NewsDetail.asp?id=2572690
出处:蓝色理想
责任编辑:moby
◎进入论坛Flash专栏版块参加讨论
|