javascript中的函数(方法)延时执行的实现

最近一直在重复发明轮子,又碰到了一个需要用到类似sleep函数的函数,可javascript中并没有提供函数暂停执行Nms的方法,只能自己利用setInterval实现一个类似的功能。

js 代码
  1. delay = function(fn,parm,scope,config){   
  2.     var start = new Date();   
  3.     var zero_interval = null;   
  4.     var config = config || [];   
  5.        
  6.     var h = function(){   
  7.         if(new Date()-start >=parm){   
  8.             clearInterval(zero_interval);   
  9.             fn.apply(scope,config);   
  10.         }   
  11.     }   
  12.   
  13.     zero_interval = setInterval(h,parm);   
  14. }  

参数说明如下,fn是延时之后待执行的函数,parm是延时的时间(最后的延时时间会在此基础上增加10-15ms),scope是fn函数的作用范围,config是fn函数的参数。

用法如下:

js 代码
  1. var startT;   
  2. function delayShow(){   
  3.     startT = new Date();   
  4.     delay(show,20);   
  5. }   
  6.   
  7. function show(){   
  8.     alert(new Date() - startT);   
  9. }  

这里得到的提示是31ms的样子,不过在我自己的代码中只是需要延时一下,而不需要严格控制时间的长短。所以这个时间也就没必要细究了。

我自己程序中的代码如下:

js 代码
  1. ZERO.delay = function(fn,parm,scope,config){   
  2.     var start = new Date();   
  3.     var zero_interval = null;   
  4.     var config = config || [];   
  5.     var scope = scope || window;   
  6.        
  7.     var h = function(){   
  8.         if(new Date()-start >=parm){   
  9.             clearInterval(zero_interval);   
  10.             fn.apply(scope,config);   
  11.         }   
  12.     }   
  13.   
  14.     zero_interval = setInterval(h,parm);   
  15. }   
  16.   
  17.   
  18. ZMenu.prototype.onMouseOver = function(){   
  19.     this.addClass("mouseoverstyle");   
  20.     this.hiddenMenu = false;   
  21.     if(this.hasChild){   
  22.         this.click();   
  23.     }   
  24. }   
  25.   
  26. ZMenu.prototype.onMouseOut = function(){   
  27.     //此处需要延时一段时间再执行   
  28.     if(this.hasChild){   
  29.         ZERO.delay(this.hideChildMenu,20,this);   
  30.         this.hiddenMenu = true;   
  31.     }   
  32.     else{   
  33.         this.hiddenMenu = true;   
  34.         this.hideChildMenu();   
  35.     }   
  36. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值