Actionscript 3 删除的swf中的kill setTimeOut
//以下功能用于移除加载的swfActionscript 3 删除的swf中的kill setTimeOut,actionscript-3,flash,Actionscript 3,Flash,//以下功能用于移除加载的swf private函数装入器kaldir() { 系统。暂停ForgCificCollectionImporting(0.50); 尝试 { 对于(var sts:int=0;sts请查看手册: 据说,setTimeout为定时进程返回uint-唯一的数字标识符。使用此标识符可通过调用clearTimeout()方法取消进程。 因此,如果要清除此超时,简单的clearTimeout(sts);将不起作用。您需要执行以下操作: var timeoutId = setT
private函数装入器kaldir()
{
系统。暂停ForgCificCollectionImporting(0.50);
尝试
{
对于(var sts:int=0;sts请查看手册:
据说,setTimeout
为定时进程返回uint
-唯一的数字标识符。使用此标识符可通过调用clearTimeout()方法取消进程。
因此,如果要清除此超时,简单的clearTimeout(sts);
将不起作用。您需要执行以下操作:
var timeoutId = setTimeout(bkl,1000);
clearTimeout(timeoutId);
不确定这是否会在整个swf文件中起作用,但您始终可以在加载的swf中插入任何公共方法,您可以从父级调用该方法,因此可以在那里进行清除。根据您是否使用计时器而不是设置超时
,它们将被停止
例如,可以按如下方式执行1秒超时:
var timer:Timer = new Timer(1000, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerComplete);
timer.start();
function timerComplete(e:TimerEvent):void {
// do stuff
}
这样做需要一些额外的代码,但您可以将其封装在一个全局util函数中,就像setTimeout
:
package {
public function doTimeout(delay:uint, callback:Function):Timer {
var timer:Timer = new Timer(delay, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(e:TimerEvent):void {
timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee);
callback();
});
timer.start();
return timer;
}
}
用法:
doTimeout(1000, callback);
注意:您可能需要将返回的计时器
存储在某个地方,否则它可能会被垃圾收集。我不是100%确定
另一种选择是使用某种可以轻松清除所有超时的全局管理器:
public class Timeout {
private static var timeouts:Vector.<int> = new <int>[];
public static function add(delay:uint, callback:Function):int {
var timeout:int = setTimeout(delay, callback);
timeouts.push(timeout);
return timeout;
}
public static function clearAll():void {
for each(var id:int in timeouts){
clearTimeout(id);
}
}
}
这将只清除设置的前20个超时。这是非常脆弱的。稍微好一点的解决方法是循环检查所有已启动的超时,这可能通过检查当前超时id来确定:
var i:uint = setTimeout(function(){}, 0);
while(i--)
clearTimeout(i);
这仍然有点脆弱:我找不到任何文档来保证超时id实际上是有序的,尽管这似乎是一种行为。而且,假设一旦您达到uint
的最大值,它将返回到0。尽管这是一个巨大的数字
另外,如果当前超时id非常大,循环可能会导致挂起。您可以通过只清除最后一个(比如1000个)超时来避免这种情况。总而言之,这是一个相当脆弱的解决方案。一些AS3会很好…这很好,但我有超过100.000个。作为文件,我没有在任何设置超时时使用任何id,谢谢如果需要,您需要使用id您要清除超时:)我应该知道,在ı开始在这个项目中工作之前,ı不能更改侧加载swf中的代码,我需要一些东西,当ı删除加载的swf时,可以停止设置超时。您必须更改它。全局查找并用一个超时抽象替换setTimeout
可能是最简单的。我将l处理您建议的代码,如果找不到更好的删除函数(var sts:int=0;sts)cleatTimeout(sts)的问题,请将重点放在jsfl上,以替换setTimout
是指sts
将仅从1到20,而计时器ID是一个增量值,这意味着在前20次setTimeout
调用后,ID将大于20。因此,您的代码将停止工作。一个稍微聪明的方法是从0循环到当前超时ID。我将在原始答案中发布一个片段。..
var i:uint = setTimeout(function(){}, 0);
while(i--)
clearTimeout(i);