`
bazhuang
  • 浏览: 147888 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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. }   
分享到:
评论
1 楼 gems 2007-12-01  
既然是执行一次,为什么不用setTimeout呢

相关推荐

    javascript延时执行跳转或执行函数

    延时执行跳转或执行函数 url可以为地址或者定义好的javascript/jquery函数, 定义每次延时时间和延时次数, callback是每次延时可以执行的回调函数

    javascript延时重复执行函数 lLoopRun.js

    "javascript延时重复执行函数 lLoopRun.js" JavaScript 延时重复执行函数 lLoopRun.js ...lLoopRun 函数是一个非常有用的 JavaScript 函数库,可以帮助开发者快速实现各种 JavaScript 开发场景中的延时重复执行功能。

    Javascript Function对象扩展之延时执行函数

    如果你在一个应用里面常常要“延时执行某某函数”,那末基于DRY的原则,可以针对Function全局对象进行扩展,为函数增加一个延时方法如delay,这样会让你的代码更简洁有效。 扩站Function对象增加delay方法如下: 代码...

    利用setTimeout解决延时执行某操作

    setTimeout,javascript 延时执行函数,闭包处理 利用javascript闭包处理延时操作

    javascript 使用sleep函数的常见方法详解

    本文实例讲述了javascript 使用sleep函数的常见方法。分享给大家供大家参考,具体如下: 一.什么是sleep函数? 花一点时间来聊一下sleep函数,首先什么是sleep函数? sleep是一种函数,他的作用是使程序暂停指定的...

    Javascript延迟执行实现方法(setTimeout)

    延迟执行,其实就是用到了setTimeout这个函数。善于利用这个函数,可以减少很多ajax的请求,以及dom操作。

    JavaScript完全自学宝典 源代码

    Calculate1.java 计算浮点数运算结果并调用页面中JavaScript函数的Applet。 Calculate1.class Calculate1.java的字节码文件。 第16章(\c16) 示例描述:介绍JavaScript访问本地文件的各种方法。 16.1....

    Javascript中setTimeOut和setInterval的定时器用法

    Javascript的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请求获取最新数据等等。但它们的应用是有区别的。 ...

    javascript 不停(setInterval)/延时(setTimeout)函数使用实例

    如果想实现页面的一些函数的定时执行,需要用到下面的函数大家可以看下用法。

    toniewei#JavaScript-3#第13章 定时器与延迟函数1

    // 延时1s执行// 或写成如果需要执行的函数没有参数,可以采用上例的第一种写法,如果需要带参数的话,就需要采用上例的第二种写法,但是采用上例的第二种写法需要

    不得不分享的JavaScript常用方法函数集(下)

    本文中,收集了一些比较常用的Javascript函数,希望对学习JS的朋友们有所帮助。 22. 替换元素 $(document).ready(function() { $('#id').replaceWith(' <DIV>I have been replaced '); }); 23. jQuery延时加载...

    JQuery权威指南源代码

    传统的JavaScript方法实现Ajax功能 load()方法实现Ajax功能 getJSON函数获取数据 getScript函数获取数据 get实现异步获取xml文档数据 $.get发送请求 $.post发送请求 serialize()序列化表单 $.ajax()方法发送...

    JavaScript定时器详解及实例

    JS里设定延时: 使用SetInterval和... clearTimeout(对象) 清除已设置的setTimeout对象 clearInterval(对象) 清除已设置的setInterval对象 使用定时器实现JavaScript的延期执行或重复执行 window对象提供了两个方法来

    js的延迟执行问题分析

    使用JavaScript可以实现代码的延时执行,也就是说当一个函数被调用时不立即执行某些代码,而是等一段指定的时间后再执行,这就叫做计时事件。

    javascript间隔定时器(延时定时器)学习 间隔调用和延时调用

    用setInterval方法可以以指定的间隔实现循环调用函数,直到clearInterval方法取消循环 用clearInterval方法取消循环时,必须将setInterval方法的调用赋值给一个变量,然后clearInterval方法引用该变量。 代码如下:...

    Node.js中使用计时器定时执行函数详解

    如果你熟悉客户端JavaScript编程,你可能使用过setTimeout和setInterval函数,这两个函数允许延时一段时间再运行函数。比如下面的代码, 一旦被加载到Web页面,1秒后会在页面文档后追加“Hello there”: 代码如下:...

    sihai00#interview#实现sleep函数1

    sleep函数延时函数:等待一段时间,再继续进行async function output() {let out = await sleep(1000);参考实

Global site tag (gtag.js) - Google Analytics