javascript 实现的定时器

解决了以下问题:

1 实现传参数和改变作用域

2 保证定时触发器,触发间隔。

调用方式:

1 method:执行的方法  使用的参数为paramters [参数1,参数2]

paramters:传递的参数,形式 [参数1,参数2]

milliseconds:执行间隔  1000代表1秒

scope:代表作用域

GLOBAL.Timer.setInterval(method, paramters, milliseconds,scope);
GLOBAL.Timer.setTimeout(method, parameters, milliseconds,scope);


  1 GLOBAL.namespace("Timer");
  2 GLOBAL.Timer._callTimeOutMethod = function(method, parameters,scope) {
  3     return function() {
  4         if (typeof (parameters) == "undefined" ||typeof (parameters) == "null") {
  5             if(typeof(scope) == "undefined"||typeof(scope) == "null")
  6             {
  7                method();
  8             }else
  9             {
 10               method.apply(scope);
 11             }
 12         } else {
 13             if(typeof(scope) == "undefined"||typeof(scope) == "null")
 14             {
 15             method(parameters);
 16             }else
 17             {
 18               method.apply(scope,parameters);
 19             }
 20         }
 21     }
 22 };
 23 GLOBAL.Timer._callIntervalMethod = function(method, parameters, milliseconds,scope) {
 24     return function() {
 25         if (typeof (parameters) == "null") {
 26             if(typeof(scope) == "undefined"||typeof(scope) == "null")
 27             {
 28             method();}
 29             else
 30             {
 31               method.apply(scope);
 32             }
 33         } else {
 34         if(typeof(scope) == "undefined"||typeof(scope) == "null")
 35             {
 36             method(parameters);}
 37             else
 38             {
 39               method.apply(scope,parameters);
 40             }
 41         }
 42         window.setTimeout(arguments.callee, milliseconds);
 43     }
 44 };
 45 /**
 46  * 调用函数 参数method 需要以数组作为参数
 47  */
 48 GLOBAL.Timer.setTimeout = function(method, parameters, milliseconds,scope) {
 49     if (typeof (parameters) == "null") {
 50         if(typeof(scope) == "undefined")
 51         {
 52         return window.setTimeout(GLOBAL.Timer._callTimeOutMethod(method),
 53                 milliseconds);
 54                 }else
 55                 {
 56                   return window.setTimeout(GLOBAL.Timer._callTimeOutMethod(method,null,scope),
 57                 milliseconds);
 58                 }
 59     } else {
 60         if(typeof(scope) == "undefined")
 61         {
 62         return window.setTimeout(GLOBAL.Timer._callTimeOutMethod(method,
 63                 parameters), milliseconds);
 64                 }else
 65                 {
 66                 return window.setTimeout(GLOBAL.Timer._callTimeOutMethod(method,
 67                 parameters,scope), milliseconds);
 68                 }
 69     }
 70 };
 71
 72 GLOBAL.Timer.clearTimeout = function(timerID) {
 73     return window.clearTimeout(timerID);
 74 };
 75 GLOBAL.Timer.clearInterval = function(timerIntervalID) {
 76     return GLOBAL.Timer.clearTimeout(timerIntervalID);
 77 };
 78 /**
 79  * 安全的间隔执行 以setTimeout实现
 80  */
 81 GLOBAL.Timer.setInterval = function(method, paramters, milliseconds,scope) {
 82     if (typeof (parameters) == "null") {
 83         if(typeof (scope) == "undefined")
 84         {
 85           return window.setTimeout(GLOBAL.Timer._callIntervalMethod(method, null,
 86                 milliseconds), milliseconds);
 87         }else
 88         {
 89         return window.setTimeout(GLOBAL.Timer._callIntervalMethod(method, null,
 90                 milliseconds,scope), milliseconds);
 91                 }
 92     } else {
 93         if(typeof (scope) == "undefined")
 94         {
 95         return window.setTimeout(GLOBAL.Timer._callIntervalMethod(method,
 96                 parameters, milliseconds), milliseconds);
 97                 }else
 98                 {
 99                 return window.setTimeout(GLOBAL.Timer._callIntervalMethod(method, null,
100                 milliseconds,scope), milliseconds);
101                 }
102     }
103 };
时间: 2024-12-18 03:42:57

javascript 实现的定时器的相关文章

JavaScript学习05 定时器

JavaScript学习05 定时器 定时器1 用以指定在一段特定的时间后执行某段程序. setTimeout(): 格式:[定时器对象名=] setTimeout(“<表达式>”,毫秒) 功能:执行<表达式>一次. 例子: <!DOCTYPE html> <html> <head> <title>timer1.html</title> <meta http-equiv="keywords" co

javascript两种定时器的使用及其清除

<!--示例代码如下:--><!DOCTYPE html> <html> <body> <p>A script on this page starts this clock:</p> <p id="demo"></p> <input type="button" value="停止" onclick="abc()"/> &

每天一个JavaScript实例-canvas定时器动态的更新一个线条

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-canvas定时器动态的更新一个线条</title> <style> </style> <script> wind

JavaScript事件驱动机制&amp;定时器机制

在浏览器中,事件作为一个极为重要的机制,给予JavaScript响应用户操作与DOM变化的能力:在NodeJS中,异步事件驱动模型则是提高并发能力的 基础. 一.程序如何响应事件 程序响应外部的事件有两种方式: 1. 中断 操作系统处理键盘等硬件输入就是通过中断来进行的,这个方式的好处是即使没有多线程,我们也可以放心地执行我们的代码,CPU收到中断信号之后 自动地转去执行相应的中断处理程序,处理完成后会恢复原来的代码的执行环境继续执行.这种方式需要硬件的支持,一般来说都会被操作系统封装起 来.

javascript中的定时器(How JavaScript Timers Work)

javascript定时器工作原理是一个重要的基础知识点.因为定时器在单线程中工作,它们表现出的行为很直观.我们该如何创建和维护定时器呢?要从如下三个函数(都是定义在全局作用域,在浏览器中就是window的方法)说起: var id=setTimeout(fn,delay);-初始化一个只执行一次的定时器,这个定时器会在指定的时间延迟delay之后调用函数fn,该setTimeout函数返回定时器的唯一id,我们可以通过这个id来取消定时器的执行. var id=setInvertal(fn,d

深入理解javascript之高级定时器

setTimeout()和setInterval()可以用来创建定时器,其基本的用法这里就不再做介绍了.这里主要介绍一下javascript的代码队列.在javascript中没有任何代码是立即执行的,一旦进程空闲则尽快执行.所以说定时器中设置的时间并不代表执行时间就一定相符,而是代表代码会在指定时间间隔后加入到队列中进行等待.如果在这个时间点上,队列中没有其他东西,那么这段代码就会被执行,表面上看上去好像代码就在精确指定的时间点上执行了.所以就会产生一些问题. 重复定时器 通常,我们使用set

JavaScript中的定时器

定时器 1.setTimeout 这个方法用于在指定的毫秒数之后执行某个函数,返回定时器的句柄 混合的 setTimeout()方法设置一个定时器,该定时器在定时器到期后执行一个函数或指定的一段代码. 语法 let timeoutID = window.setTimeout(func[, delay, param1, param2, ...]); let timeoutID = scope.setTimeout(code[, delay]); let timeoutID = window.set

[ Javascript ] JavaScript中的定时器(Timer) 是如何工作的!

作为入门者来说,了解JavaScript中timer的工作方式是很重要的.通常它们的表现行为并不是那么地直观,而这是因为它们都处在一个单一线程中.让我们先来看一看三个用来创建以及操作timer的函数. var id = setTimeout(fn, delay); - 初始化一个单一的timer,这个timer将会在一定延时后去调用指定的函数.这个函数(setTimeout)将返回一个唯一的ID,我们可以通过这个ID来取消timer. var id = setInterval(fn, delay

JavaScript时钟与定时器

1.时钟 例子:时钟 <!doctype html><html><head><meta charset="utf-8"><title>clock</title><script type="text/javascript"> window.onload = function(){ function fnRunning(){ var oDiv = document.getElementB