Home arrow Articles arrow Javascript Progressbar class
Javascript Progressbar class PDF Print E-mail
Written by Administrator   
Saturday, 27 October 2007
This is a basic object oriented progressbar written in javascript. Part of the script is a randomized increment which allows you to see how it looks. To see a possible implementation of the script click here Also you can check out the mechanics of the script here.


Javascript Code:
 
/*******************************************************************************************************************************
************************************************************************************************************************
Progress bar object functions


*************************************************************************************************************************
*************************************************************************************************************************/
var globalBarCollection = new Array()
var 
globalBarCount 0

function progressbar(prefix){

   
this.globalID globalBarCount    
   this
.ledImage "led.gif"
   
this.prefix prefix    
   this
.pgID 0
   this
.spg 0
   this
.progresstimer false
   this
.interval 0
   this
.lightbg 'orange'
   
this.darkbg 'eeeeee'
   
globalBarCollection[this.globalID] = this
   globalBarCount
++
    }

//setup table for displaying progress
progressbar.prototype.place = function() {
           
with(document){
        
writeln('<table class="pbar" id='+this.prefix+' bgcolor="ffffff" cellspacing=1 cellpadding=0><tr>')
        for(
i=0;i<100;i++){
            
writeln('<td width=5 id='+this.prefix+i+'></td>')            
            }    
        
writeln('</tr></table>')
        }
    }


//repeat coloring of cells until 100%
progressbar.prototype.play = function(){
    
    
this.spg this.pgID
//    step(this)
    
//    this.interval = GetRandom(200,1000) //generate random time for timeout
    
//if(!this.myPrototypeCall){
//    var myInst = globalBarCollection[this.globalID]
//    this.myPrototypeCall = function() { myInst.play()}
//    this.progresstimer = window.setInterval (this.myPrototypeCall, interval);
//    }
    
//cause of issues with running timeout from within prototype this is an attempt to use utility function to substitute
    //step(this)
    
doProtoTypeInterval(this.globalID)
    }
progressbar.prototype.pause = function(){
    
        
clearTimeout(this.progresstimer)
        
    }
progressbar.prototype.reset = function(){
    
this.pause()
    
clearRange(this.pgID,this.prefix)
      
this.pgID 0
      this
.spg 0
    
}

/*******************************************************************************************************************************
************************************************************************************************************************
Progress bar utility functions


*************************************************************************************************************************
*************************************************************************************************************************/
//setTimeout workaround

function doProtoTypeInterval(objID){
//    step(globalBarCollection[objID])

    
currentobj = globalBarCollection[objID]

    
distance GetRandom(0,6//generate random increment for range of cells 
    
if((currentobj.pgID distance) >= 99){
        
currentobj.pgID 100
        
}
    else { 
currentobj.pgID+=distance }
    
bgfill(currentobj.spg,currentobj.pgID,currentobj.prefix)
    
    
currentobj.interval GetRandom(200,1000//generate random time for timeout
    
currentobj.progresstimer window.setTimeout("doProtoTypeInterval("+objID+")",currentobj.interval)
    }

//execute coloring of range of cells
//to review function because there was no success in calling setTimeout from prototyped function play()
//key utility function to fill range of cells
//obsolete! functionality placed in doProtoTypeInterval
function step(myobject){
    
    
distance GetRandom(0,6//generate random increment for range of cells 
    
if((myobject.pgID distance) >= 99){
        
myobject.pgID 100
        
}
    else { 
myobject.pgID+=distance }
    
bgfill(myobject.spg,myobject.pgID,myobject.prefix)
    }

//utility function used by object during incrumenting
function GetRandom(start,end){ 
    var 
range end start 1
      var 
result start Math.floor(Math.random()*range); 
      return 
result
    }

//utility function used to color range of cell
//not sure why but pointers to cell objects not changing.
//Use bgfill instead.
function fill(firstPG,lastPG,prefix){
    for(
x=firstPG;x<lastPG;x++){
        
pgsetp prefix x
        pgsetp 
document.getElementById(pgsetp)
        
pglight document.createElement('IMG');
        
pglight.src"led.gif"
        
pglight.setAttribute('width','5');
        
pglight.setAttribute('height','5');
        
//pgsetp.removeChild(pgsetp.childNodes[0]);
        
pgsetp.appendChild(pglight);    
        }
    }
function 
bgfill(firstPGlastPGprefix){
    for(
x=firstPG;x<lastPG;x++){
        
pgsetp prefix x
        pgsetp 
document.getElementById(pgsetp)
          
pgsetp.style.background 'gray'
        
}
    }
function 
clearRange(lastPG,prefix){
      for(
x=0;x<lastPG;x++){
        
pgsetp prefix x
        
//alert(pgsetp)
        
pgsetp document.getElementById(pgsetp)
          
pgsetp.style.background 'white'
            
        
}
    } 



Add to favourite articles (125) | Place this article on your website | Views: 387

Comment on this article
RSS comments

Only registered users can write comments.
Please login or register.

blabh
Last Updated ( Saturday, 20 February 2010 )