 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© 1997-2000 InsideDHTML.com, LLC. All rights reserved.
|