zoukankan      html  css  js  c++  java
  • 深入了解setInterval方法

    相信大家对setInterval方法肯定非常熟悉,但不少人对其缺乏深入的了解,致使当一个flash里有多个setInterval的时候就容易混淆,该清除的间隔lID没有清除,不该清除的时候却清除了。对于setInterval的语法我就不赘述,很多文章都有详细说明,下面来说一下 setInterval的几个重点。

    1、setInterval和clearInterval都是全局函数,也就是_global.setInterval()和_global.clearInterval()。

    这一点大家应该都知道,但是可能并没有特别注意。不过这点对我们理解他们非常重要。setInterval的返回值是一个间隔lID(数字),所以这个间隔lID也是全局的。比如下面的代码:

    var rootID=setInterval(_root,"test",500,"rootID");

    function test(arg)

    {   

      trace(arg);

    }

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

    2、每一次调用setInterval,就会返回一个间隔lID,这个ID数值为全局setInterval的调用次数。

    比如下面的代码:

    var rootID=setInterval(_root, "test", 500, "rootID");

    btn1.onPress=function()

    {       

      setInterval(_root, "test", 500, "btn1_ID");

    }

    btn2.onPress=function(){       

      setInterval(_root, "test", 500, "btn2_ID");

    }

    function test(arg)

    {    

      trace(arg);

    }

    在这个例子里,我们可以用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。因此给间隔lID添加标识符就显得非常重要。但是必须把他分配到一个对象的成员变量中。 比如下面的代码:

    newtest();

    function newtest()

    {

      var newID=setInterval(_root,"test",500,"btn2_ID");

    }

    function test(arg)

    {   

      trace(arg);

    }

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

    4、增加一个清除loadMovieNum加载进来swf的间隔ID的例子:

    在IntervalID2.swf文件里的有个间隔ID:

    var IntervalID2=setInterval(_root,"test",1000,"IntervalID2");

    function test(arg)

    {    

      trace(arg);;

    }

    在IntervalID1.swf里:

    loadMovieNum("IntervalID2.swf",1)
    btn1.onPress = function(){
      
    clearInterval(_level1.IntervalID2)
      
    IntervalID1=setInterval(_root,"test",2000,"IntervalID1";
    };
    btn2,onPress =
    function(){
       clearInterval(2)
    //clearInterval(IntervalID1)
    };
    function test(arg){
       
    trace(arg);
    }   

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

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

    经典论坛讨论: http://bbs.blueidea.com/thread-2740196-1-1.html

    本文链接:http://www.blueidea.com/tech/multimedia/2007/4680.asp

  • 相关阅读:
    bladex从blade-dev.yaml 读取配置信息
    怎么判断map不为空
    根据来源编号对明细进行分组 跟库存做对比 用到的技术 list根据某个字段分组 Double Long 比较大小
    hibernate根据包名获取该包下实体类,数据库中不存在的库表名称
    hibernate NonUniqueObjectException 一个session中存有两个识别码(id)相同的对象
    正则匹配不包含某些字符 update(?!tdyt)[A-z(]*(qlgz)
    idea常用插件
    Rainbow Roads
    Jumping Haybales (dp)
    01背包
  • 原文地址:https://www.cnblogs.com/itjeff/p/3392276.html
Copyright © 2011-2022 走看看