2007-12-01
javascript中的函数(方法)延时执行的实现
关键字: javascript 延时最近一直在重复发明轮子,又碰到了一个需要用到类似sleep函数的函数,可javascript中并没有提供函数暂停执行Nms的方法,只能自己利用setInterval实现一个类似的功能。
js 代码
- delay = function(fn,parm,scope,config){
- var start = new Date();
- var zero_interval = null;
- var config = config || [];
- var h = function(){
- if(new Date()-start >=parm){
- clearInterval(zero_interval);
- fn.apply(scope,config);
- }
- }
- zero_interval = setInterval(h,parm);
- }
参数说明如下,fn是延时之后待执行的函数,parm是延时的时间(最后的延时时间会在此基础上增加10-15ms),scope是fn函数的作用范围,config是fn函数的参数。
用法如下:
js 代码
- var startT;
- function delayShow(){
- startT = new Date();
- delay(show,20);
- }
- function show(){
- alert(new Date() - startT);
- }
这里得到的提示是31ms的样子,不过在我自己的代码中只是需要延时一下,而不需要严格控制时间的长短。所以这个时间也就没必要细究了。
我自己程序中的代码如下:
js 代码
- ZERO.delay = function(fn,parm,scope,config){
- var start = new Date();
- var zero_interval = null;
- var config = config || [];
- var scope = scope || window;
- var h = function(){
- if(new Date()-start >=parm){
- clearInterval(zero_interval);
- fn.apply(scope,config);
- }
- }
- zero_interval = setInterval(h,parm);
- }
- ZMenu.prototype.onMouseOver = function(){
- this.addClass("mouseoverstyle");
- this.hiddenMenu = false;
- if(this.hasChild){
- this.click();
- }
- }
- ZMenu.prototype.onMouseOut = function(){
- //此处需要延时一段时间再执行
- if(this.hasChild){
- ZERO.delay(this.hideChildMenu,20,this);
- this.hiddenMenu = true;
- }
- else{
- this.hiddenMenu = true;
- this.hideChildMenu();
- }
- }
- 16:12
- 浏览 (357)
- 评论 (1)
- 分类: javascript
- 进入论坛
- 相关推荐
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 1448 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
职业生涯错过的最遗憾的公 ...
bazhuang 写道 整个职业生涯估计就是在拒与被拒之间徘徊,不过还是希望可 ...
-- by zhangxi123 -
职业生涯错过的最遗憾的公 ...
soni 写道downpour 写道土豆网哪里招你喜欢了? 土豆的视频我就没有一 ...
-- by waterdh -
职业生涯错过的最遗憾的公 ...
淘宝...
-- by javaxy -
职业生涯错过的最遗憾的公 ...
downpour 写道土豆网哪里招你喜欢了? 土豆的视频我就没有一次成功的打开过 ...
-- by soni -
职业生涯错过的最遗憾的公 ...
我中意的公司我都破门而入了 相反 倒是觉得在一些垃圾公司浪费了太多时间
-- by seen






评论排行榜