开启左侧

[CSS] 深入了解setInterval方法的几个重点

[复制链接]
发表于 2012-5-26 23:35:09 | 显示全部楼层 |阅读模式

相信大家对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. }
  5. 复制代码
复制代码
我们用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. }
  11. 复制代码
复制代码
在这个例子里,我们可以用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. }
  8. 复制代码
复制代码
这样的标识方法就是错误的,因为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. }
  5. 复制代码
复制代码
在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. }
  13. 复制代码
复制代码
在此例中,如果我们先点击btn1再点击btn2,那么2个间隔ID都会删除,而如果先点击btn2,那么IntervalID1是没有清除的。明白上面三点后,这些应该就是显而易见的了。

总结:了解了上面几个重点后,我想使用setInterval方法就会一清二白了,不会怕setInterval了而clearInterval不了的情况了。如有错误,敬请指正。
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
发表于 2012-5-26 23:35:18 | 显示全部楼层


谢谢楼主~~实在太感激拉,正被这东西困扰呢~~~
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
发表于 2012-5-26 23:35:33 | 显示全部楼层


biggrin.gif 不错
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
发表于 2012-5-26 23:35:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
发表于 2012-5-26 23:35:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
 楼主| 发表于 2012-5-26 23:35:59 | 显示全部楼层


写的很好
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
发表于 2012-5-26 23:36:08 | 显示全部楼层

原帖由 mirycat 于 2007-4-27 10:50 发表
clearInterval(1) 的那个还真不知道

是啊,还可以用ID来清除啊,呵呵,学到了,谢谢楼主 biggrin.gif
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
发表于 2012-5-26 23:36:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
发表于 2012-5-26 23:36:25 | 显示全部楼层


在某地看到这么一个用法,感觉setInterval的用法还挺多的
var setID:Number=setInterval(fun,200,exm)
function fun(f:Function)
{
f();
}
function exm()
{
trace("mamamima");
}
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

 
QQ在线咨询
售前咨询热线
0532-88371356
售后服务微信
pingduwangzhan
快速回复 返回顶部 返回列表