You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.2 KiB
171 lines
4.2 KiB
/* |
|
DynAPI Distribution |
|
ImageClip Widget Class by Raymond Irving (http://dyntools.shorturl.com) |
|
|
|
The DynAPI Distribution is distributed under the terms of the GNU LGPL license. |
|
|
|
requires: DynLayer |
|
*/ |
|
|
|
function ImageClip(clipImage,x,y,w,h,color,cols,rows,speed) { |
|
|
|
if (clipImage && clipImage.constructor==Object){ |
|
var args=clipImage; // dictionary input |
|
clipImage = args.clipImage; |
|
x = args.x; |
|
y = args.y; |
|
w = args.w; |
|
h = args.h; |
|
color = args.color; |
|
cols = args.cols; |
|
rows = args.rows; |
|
speed = args.speed; |
|
} |
|
|
|
this.DynLayer=DynLayer; |
|
this.DynLayer(null,x,y,w,h,color); |
|
|
|
this.cols=(cols||0); |
|
this.rows=(rows||0); |
|
this.speed=(speed||100); |
|
this.playing==false; |
|
this.internalLoop=false; |
|
|
|
// create child layer for image |
|
this.addChild(new DynLayer(null,0,0,this.w*this.cols,this.h*this.rows),'lyrCanvas'); |
|
|
|
this.setClipImage(clipImage,cols,rows); |
|
this.addEventListener(ImageClip.events); |
|
this.setOverflow('hidden'); |
|
}; |
|
var p = dynapi.setPrototype('ImageClip','DynLayer'); |
|
p.addImage = function(img,col,row) { |
|
if(!img) return; |
|
if(!this._imgFrames) this._imgFrames = ['']; |
|
index = ((col*row)>=0)? col*row:this._imgFrames.length; |
|
this._imgFrames[index] = img; |
|
if(!this._clipImage && index==1) this.setFrame(1); |
|
}; |
|
p.getFrame = function(){ |
|
return this._frame; |
|
}; |
|
p.setClipImage=function(clipImage,cols,rows){ |
|
if(!clipImage) return; |
|
this._clipImage=clipImage; |
|
clipImage = (clipImage.getHTML)? clipImage.getHTML():'<img height='+this.lyrCanvas.h+' width='+this.lyrCanvas.w+' border=0 src="'+((clipImage.src)? clipImage.src:clipImage)+'">'; |
|
this.setupFrames(cols,rows); |
|
this.lyrCanvas.setHTML(clipImage); |
|
}; |
|
p.setupFrames=function(cols,rows){ |
|
this.cols=cols||this.cols; |
|
this.rows=rows||this.rows; |
|
this.lyrCanvas.setSize(this.w*this.cols,this.h*this.rows); |
|
}; |
|
p.setSpeed=function(sp){ |
|
this.speed=(sp||this.speed); |
|
}; |
|
p.setFrame=function(fn){ |
|
var img,imgs = this._imgFrames; |
|
if (isNaN(fn)==true) return; |
|
var icol=Math.floor((fn-1)/this.rows); |
|
var irow=((fn-1)-(icol*this.rows)); |
|
if (fn<=(this.cols*this.rows) && fn>0){ |
|
this._frame=fn; |
|
img=(imgs && imgs[fn])? imgs[fn]:null; |
|
if(img){ |
|
img=(img.getHTML)? img.getHTML():'<img height='+this.lyrCanvas.h+' width='+this.lyrCanvas.w+' border=0 src="'+((img.src)? img.src:img)+'">'; |
|
this.lyrCanvas.setHTML(img); |
|
this.lyrCanvas.setLocation(0,0); |
|
} |
|
else { |
|
icol=icol*-1; |
|
irow=irow*-1; |
|
this.lyrCanvas.setLocation(this.w*icol,this.h*irow); |
|
} |
|
this.invokeEvent("framechange"); |
|
} |
|
}; |
|
p.setFrameMartix=function(col,row){ |
|
this.setFrame(col*row); |
|
}; |
|
p.playAnimation=function(loop,sequence){ |
|
if (this.playing==true) return; |
|
if (this.internalLoop!=true) { |
|
if(!sequence) sequence = '1>'+this.cols; |
|
this.aniseq=sequence.split(','); |
|
this.doloop=loop; |
|
} |
|
this.ls=0; |
|
this.internalLoop=false; |
|
this.playing=true; |
|
this.timerSEQ=0; |
|
this.playSEQ(); |
|
this.invokeEvent("frameplay"); |
|
}; |
|
p.stopAnimation=function(){ |
|
if (this.timerSEQ>=0) window.clearTimeout(this.timerSEQ); |
|
this.playing=false; |
|
this.invokeEvent("framestop"); |
|
}; |
|
p.nextSEQ=function() { |
|
if (this.playing==false) return; |
|
this.ls++; |
|
if (this.ls<this.aniseq.length) { |
|
this.playSEQ(); |
|
}else{ |
|
this.playing=false; |
|
if (this.doloop) { |
|
this.internalLoop=true; |
|
this.playAnimation(); |
|
} |
|
} |
|
}; |
|
p.playSEQ=function(inx) { |
|
var st,ar,sq; |
|
if (this.playing==false) return; |
|
sq=this.aniseq[this.ls]; |
|
//forward |
|
st=sq.indexOf('>'); |
|
if (st>0) { |
|
ar=sq.split(">"); |
|
if (inx!=null) inx++; |
|
else inx=parseInt(ar[0]); |
|
this.setFrame(inx); |
|
if (inx>parseInt(ar[1])){ |
|
this.nextSEQ(); |
|
return; |
|
}else{ |
|
this.timerSEQ=window.setTimeout(this+'.playSEQ('+inx+')',this.speed); |
|
return; |
|
} |
|
} |
|
//reverse |
|
st=sq.indexOf("<"); |
|
if (st>0) { |
|
ar=sq.split("<"); |
|
if (inx!=null) inx--; |
|
else inx=parseInt(ar[1]); |
|
this.setFrame(inx); |
|
if (inx<=parseInt(ar[0])){ |
|
this.nextSEQ(); |
|
return; |
|
}else{ |
|
this.timerSEQ=window.setTimeout(this+'.playSEQ('+inx+')',this.speed); |
|
return; |
|
} |
|
} |
|
// sleep |
|
st=sq.indexOf("p"); |
|
if (st==0) { |
|
sq=sq.replace("p",""); |
|
this.timerSEQ=window.setTimeout(this+'.nextSEQ();',parseInt(sq)); |
|
return; |
|
} |
|
// display single frame |
|
if (isNaN(sq)==false) { |
|
if ((sq)>0) this.setFrame(sq); |
|
this.timerSEQ=window.setTimeout(this+'.nextSEQ();',this.speed); |
|
} |
|
|
|
}; |
|
|
|
|