SiteExperts.com Logo Home | Community | Developer's Paradise | Jobs
User Groups | Site Tools | Site Information | Search

Inside Technique : Extending JavaScript with Function Pointers : The setInterval() Code

Below is the complete script. Included our our original demonstrations of timing how long you have been on this page (see status bar) and a simple clock (see the end of the page) are included.

// This script can be reused as long as the following 
// copyright notice is not removed.  
// SetInterval and ClearInterval Compatibility Script
// Copyright 1999 InsideDHTML.com, LLC. All rights reserved
// See www.insideDHTML.com for more information.

var aTracking = new Array()

var version = parseInt(navigator.appVersion)
var appName = navigator.appName
var ns4 = version>=4 && appName=="Netscape"
function runInterval(sIndex) {
  if (aTracking[sIndex]) {
    var args = aTracking[sIndex].arguments
    // Call function and pass in any extra argument
    var callargs="aTracking[sIndex].code(";
    for(i=0;i < args.length;++i) {
      callargs=callargs+"args["+i+"]";
      if(i < args.length) callargs+=",";
    }
    callargs=callargs+")";
    eval(callargs);
    // Start up timer for next iteration
    aTracking[sIndex].timerID = setTimeout("runInterval(" + sIndex + ")",aTracking[sIndex].interval)
  }
}

function newSetInterval(func,interval) {
 var fCall = func
 if (typeof func!="function") 
  var fCall= new Function(func)
 var nextIdx = aTracking.length
 aTracking[nextIdx] = new Object
 aTracking[nextIdx].interval = interval
 aTracking[nextIdx].code = fCall
 aTracking[nextIdx].arguments = new Array()
 for (var i=2;i < arguments.length;i++) 
  aTracking[nextIdx].arguments[aTracking[nextIdx].arguments.length] = arguments[i]
 aTracking[nextIdx].timerID = setTimeout("runInterval(" + nextIdx + ")",interval)
 return nextIdx
}

function newClearInterval(idx) {
 if (aTracking[idx]) {
  clearTimeout(aTracking[idx].timerID)
  aTracking[idx] = null
 }
}

if (!ns4) {
 window.setInterval = newSetInterval
 window.clearInterval = newClearInterval
}

// Demonstrations
function setClock() {
 var d = new Date()
 document.demo.clock.value = d.getHours() +":"+d.getMinutes() + ":" + d.getSeconds()
}

var clockID = setInterval(setClock,900)

function howLong(start) {
  var d = new Date()
  window.status = Math.round((d-start)/1000) + " second(s)"
}

setInterval(howLong,1000, new Date())

Ugly unformatted clock :-)
Discuss and Rate this Article