请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 14778|回复: 18

[FLASH IDE] 深入了解setInterval方法的几个重点 [复制链接]

flashlizi 楼主
帖子
521
体力
2366
威望
131
发表于 2007-4-26 14:31:51 |显示全部楼层
相信大家对setInterval方法肯定非常熟悉,但不少人对其缺乏深入的了解,致使当一个flash里有多个setInterval的时候就容易混淆,该清除的间隔ID没有清除,不该清除的时候却清除了。对于setInterval的语法我就不赘述,很多文章都有详细说明,下面来说一下setInterval的几个重点。
1、setInterval和clearInterval都是全局函数,也就是_global.setInterval()和_global.clearInterval()。
这一点大家应该都知道,但是可能并没有特别注意。不过这点对我们理解他们非常重要。setInterval的返回值是一个间隔ID(数字),所以这个间隔ID也是全局的。
比如下面的代码:
  1. var rootID=setInterval(_root, "test", 500, "rootID");
  2. function test(arg) {
  3.         trace(arg);
  4. }
复制代码

我们用clearInterval(rootID)和用clearInterval(1)的作用是一样的。

2、每一次调用setInterval,就会返回一个间隔ID,这个ID数值为全局setInterval的调用次数。
比如下面的代码:
  1. var rootID=setInterval(_root, "test", 500, "rootID");
  2. btn1.onPress=function(){
  3.        setInterval(_root, "test", 500, "btn1_ID");
  4. }
  5. btn2.onPress=function(){
  6.        setInterval(_root, "test", 500, "btn2_ID");
  7. }
  8. function test(arg) {
  9.         trace(arg);
  10. }
复制代码

在这个例子里,我们可以用clearInterval(1)来清除间隔rootID。假如我们先点击btn1再点击btn2,那么就可以用clearInterval(2)来清除点击btn1所产生的间隔ID,而用clearInterval(3)来清除点击btn2所产生的间隔ID。相反,如果我们先是点击btn2再点击btn1,那么clearInterval(2)则是清除点击btn2所产生的间隔ID.

3、给间隔lID添加标识符
在实际编程中,用上面的clearInterval(数字)这样的方式固然可以清除间隔ID,但是一旦ID过多,我们就会无法识别该清除哪个ID。因此给间隔ID添加标识符就显得非常重要。但是必须把他分配到一个对象的成员变量中。
比如下面的代码:
  1. newtest();
  2. function newtest(){
  3. var newID=setInterval(_root, "test", 500, "btn2_ID");
  4. }
  5. function test(arg) {
  6.         trace(arg);
  7. }
复制代码

这样的标识方法就是错误的,因为testID是一个局部变量,仅作用于new方法内。因而无法在其他地方用clearInterval(newID)来清除此间隔。而去掉前面的var就可以了(此时newID是_root的一个成员变量)。

4、增加一个清除loadMovieNum加载进来swf的间隔ID的例子:
在IntervalID2.swf文件里的有个间隔ID:
  1. var IntervalID2=setInterval(_root, "test", 1000, "IntervalID2");
  2. function test(arg) {
  3.     trace(arg);
  4. }
复制代码

在IntervalID1.swf里:
  1. loadMovieNum("IntervalID2.swf",1)
  2. btn1.onPress = function() {
  3.         clearInterval(_level1.IntervalID2)
  4.                 IntervalID1=setInterval(_root, "test", 2000, "IntervalID1");
  5. };
  6. btn2.onPress = function() {
  7.         clearInterval(2)
  8.                 //clearInterval(IntervalID1)            
  9. };
  10. function test(arg) {
  11.     trace(arg);
  12. }
复制代码

在此例中,如果我们先点击btn1再点击btn2,那么2个间隔ID都会删除,而如果先点击btn2,那么IntervalID1是没有清除的。明白上面三点后,这些应该就是显而易见的了。

总结:了解了上面几个重点后,我想使用setInterval方法就会一清二白了,不会怕setInterval了而clearInterval不了的情况了。如有错误,敬请指正。

[ 本帖最后由 flashlizi 于 2007-4-29 09:30 编辑 ]
已有 1 人评分威望 收起 理由
mirycat + 3 精品文章

总评分: 威望 + 3   查看全部评分

西部数码顶级域名注册商39元抢注!
帖子
19
体力
52
威望
0
发表于 2007-4-26 15:19:42 |显示全部楼层
谢谢楼主~~实在太感激拉,正被这东西困扰呢~~~
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

jevin 

小丑鱼

银牌会员

帖子
1562
体力
5411
威望
0
发表于 2007-4-26 15:21:29 |显示全部楼层
不错
xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-

使用道具 举报

CK同伈鎖

荣誉管理

帖子
4640
体力
19243
威望
372
发表于 2007-4-27 10:50:13 |显示全部楼层
clearInterval(1) 的那个还真不知道

使用道具 举报

CK同伈鎖

荣誉管理

帖子
4640
体力
19243
威望
372
发表于 2007-4-27 11:02:31 |显示全部楼层
难道是我按错了么? 谁来帮忙去掉.....

使用道具 举报

帖子
22
体力
24
威望
0
发表于 2007-4-27 13:20:03 |显示全部楼层
写的很好

使用道具 举报

帖子
168
体力
803
威望
0
居住地
重庆市 江北区
发表于 2007-4-28 10:54:21 |显示全部楼层
原帖由 mirycat 于 2007-4-27 10:50 发表
clearInterval(1) 的那个还真不知道


是啊,还可以用ID来清除啊,呵呵,学到了,谢谢楼主

使用道具 举报

白骷争宝髅气

金牌会员

帖子
1300
体力
3149
威望
73
居住地
广东省 深圳市
发表于 2007-4-29 00:22:47 |显示全部楼层
惭愧啊~自以为AS2已经熟练了的人
还一直天真滴认为var a:Numer = setInterval(funA,......)
返回的那个Number就是一个interval的‘实例’呢
原来只是标识interval顺序的数字


偶曾经一度还以建立MC当作interval的容器来防止混乱而沾沾自喜~
是不是很好笑?
偶自己先嘲笑一个~




[ 本帖最后由 xbstu2006 于 2007-4-29 00:23 编辑 ]
<font color="red"><strong>!

使用道具 举报

baituw 
帖子
38
体力
40
威望
0
发表于 2007-4-29 14:43:53 |显示全部楼层
在某地看到这么一个用法,感觉setInterval的用法还挺多的
var setID:Number=setInterval(fun,200,exm)
function fun(f:Function)
{
        f();
}
function exm()
{
        trace("mamamima");
}

使用道具 举报

帖子
137
体力
296
威望
0
发表于 2007-4-29 16:17:11 |显示全部楼层
汗一个
注册会员是什么意思?
邓败

使用道具 举报

tenlin 
帖子
65
体力
156
威望
0
发表于 2007-4-30 15:40:33 |显示全部楼层
提问~!!!!!!!!!!!!!!!!

在类中怎么使用 setInterval~
???????????????????????????????????????????????????

class Test {
public var goint:Number;
public function Test ():Void {
    btn.onRelease = function() {
    goint=setInterval(this,"this.Testint", 500, "text");
    }
}
public function Testint (aa:String):Void {
    trace(aa)
}
}

[ 本帖最后由 tenlin 于 2007-4-30 15:42 编辑 ]
www.tenlin.com

使用道具 举报

灰昼

金牌会员

帖子
1182
体力
3360
威望
7
发表于 2007-5-1 09:54:08 |显示全部楼层
真是学到东西了

使用道具 举报

iptton 
帖子
59
体力
201
威望
0
居住地
广东省 深圳市
发表于 2007-5-1 10:15:05 |显示全部楼层
#13的问题我问过...自己也解决了...帖子在哪就忘了....


PS:楼主,clearinterval()用数字不好吧,要是在大一点的项目里,你怎么知道创建的interval的顺序?

使用道具 举报

iptton 
帖子
59
体力
201
威望
0
居住地
广东省 深圳市
发表于 2007-5-1 10:17:14 |显示全部楼层
原帖由 tenlin 于 2007-4-30 15:40 发表
提问~!!!!!!!!!!!!!!!!

在类中怎么使用 setInterval~
???????????????????????????????????????????????????

class Test {
public var goint:Number;
public function Test ():Void {
    btn.onRele ...


setInterval(this,"这里不要this",200);

使用道具 举报

tenlin 
帖子
65
体力
156
威望
0
发表于 2007-5-1 15:19:49 |显示全部楼层
我都试过了,都没效果

而且我的类还是继承的
www.tenlin.com

使用道具 举报

小力

银牌会员

帖子
449
体力
2297
威望
9
发表于 2007-5-1 18:44:03 |显示全部楼层
呵呵  确实没有注意过setInterval返回的标识是啥东西,虽然一直在用

使用道具 举报

寂寞火山

荣誉管理 手机认证 

帖子
2584
体力
10205
威望
197
发表于 2007-5-4 11:52:13 |显示全部楼层
楼主罗列的前两点我也都不知道,不过不会太吃惊,我AS确实不怎么样,这个我自己清楚!

这个帖子给我最大体会是:
1,尽量不要直接使用数字作为删除标识,因为这个数字是随着调用次数而改变的,不容易确定。
2,用MC来标识这个ID是无效的,或者说是多此一举的。
3,一定不要使用一个时间轴变量来记录这个ID,因为它只能记录最后一次调用的那个setInterval,最好每次调用都使用不同的变量来记录,方便辩识和删除。
4,如果我们非要用一个变量记录这个ID,请确保每次重新调用setInterval的时候,提前clearInterval以前那个ID标识变量,如果积累到最后才删除,将造成仅删除最后一次的那个setInterval的ID,而前面的根本就没删除,造成莫名其妙的狂吃资源,到时候我们又该把责任推给FLASH了:)

使用道具 举报

小朋友

中级会员

帖子
139
体力
504
威望
0
居住地
湖南省 长沙市
发表于 2007-7-9 16:29:43 |显示全部楼层
setInterval不是只记录了最后一次调用,它是一个堆栈一样记录的

使用道具 举报

jovey 
帖子
206
体力
395
威望
0
发表于 2007-7-9 17:36:35 |显示全部楼层
好东西。。最近在做的项目就经常用到setInterval,漏掉清一个,到后面就乱了。
八点档==www.ui17.com

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-4 14:56 , Processed in 0.468718 second(s), 11 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部