[ Index ] |
|
Code source de eGroupWare 1.2.106-2 |
1 /* 2 DynAPI Distribution 3 Fader Animation Extension 4 5 The DynAPI Distribution is distributed under the terms of the GNU LGPL license. 6 7 requires: DynLayer, Fader 8 */ 9 10 function TextAnimation(x,y,text,animBy,dlyr){ 11 this.EventObject = EventObject; 12 this.EventObject(); 13 14 this._chars=[]; 15 this._lyrPool=[]; 16 this._text=text; 17 this._animBy=null; 18 this._inUse=0; 19 this._dlyr=(dlyr||dynapi.document); 20 21 this.setLocation(x,y); 22 this.animateBy(animBy); 23 this.visible=true; 24 25 var me=this; // use delegate "me" 26 var fn=function(){ 27 me._created=true; 28 me._split(); 29 } 30 if(this._dlyr!=dynapi.document) this._dlyr.onCreate(fn); 31 else { 32 var e={onload:fn}; 33 this._dlyr.addEventListener(e); 34 } 35 }; 36 var p = dynapi.setPrototype('TextAnimation','EventObject'); 37 p._clear = function(){ 38 var l; 39 var p=this._lyrPool; 40 var c=this._chars; 41 for(var i=0;i<c.length;i++){ 42 l=c[i]; 43 l.setVisible(false); 44 l.removeAllEventListeners(); 45 p[p.length]=l; 46 } 47 this._chars.length=0; 48 }; 49 p._createCharLayer=function(t){ 50 var l; 51 var p=this._lyrPool; 52 if (!p.length) l = this._dlyr.addChild(new DynLayer()); 53 else { 54 l = p[p.length-1]; 55 p.length--; 56 }; 57 l._ta=this; 58 l.setHTML(t); 59 if(l._created) { 60 // resize char layer 61 l.setSize(1,1); // why mozilla,gecko,ie?? 62 l.setSize(l.getContentWidth(),l.getContentHeight()); 63 } 64 l.setVisible(this.visible); 65 if(dynapi.ua.ie) l.css.filter='alpha(opacity=100)'; 66 else l.css.MozOpacity = 1; 67 return l; 68 }; 69 p._exec = function(cmd,i){ 70 window.setTimeout(cmd,(this._ms*i)+5); 71 }; 72 p._resize=function(align){ 73 var x=this.x; 74 var y=this.y; 75 var i,l,c=this._chars; 76 for(i=0;i<c.length;i++){ 77 l=c[i]; // resize char layer 78 if(l._created) { 79 l.setSize(1,1); // why mozilla,gecko,ie?? 80 l.setSize(l.getContentWidth(),l.getContentHeight()); 81 if(align) { 82 l.setLocation(x,y); 83 x+=l.w; 84 } 85 } 86 } 87 }; 88 p._split = function(){ 89 var i,ar,lyr; 90 var t=this._text; 91 var c=this._chars; 92 var x=this.x; 93 var y=this.y; 94 if(!t||!this._created) return; 95 this._clear(); 96 if(this._animBy=='all') { // By all 97 t='<nobr>'+t+'</nobr>'; 98 lyr=c[0]=this._createCharLayer(t); 99 lyr.setLocation(x,y); 100 }else { // By word or letter 101 if (this._animBy=='word') { 102 t=t.replace(/\s/g,' '); 103 ar=t.split(' '); 104 } 105 else { 106 ar=t.split(''); 107 } 108 for(i=0;i<ar.length;i++){ 109 if (ar[i]==' ') ar[i]=' '; 110 lyr=c[i]=this._createCharLayer(ar[i]); 111 lyr.setLocation(x,y); 112 x+=lyr.w; 113 } 114 } 115 if(lyr) lyr.addEventListener(TextAnimation._tiggerEvents); 116 }; 117 p.animateBy=function(s,delay){ // all, letter, word 118 this._animBy=s||this._animBy||'letter'; 119 this.setDelay(delay); 120 this._split(); 121 }; 122 p.getCharLayer = function(i){ 123 if (i>=0 && i<this.chars.length) return this.chars[i]; 124 }; 125 p.setDelay = function(delay){ 126 this._ms=delay||this._ms||50; 127 }; 128 p.setFont=function(size,family){ 129 130 }; 131 p.setLocation=function(x,y){ 132 x=x||0; y=y||0; 133 var byX=x-this.x; 134 var byY=y-this.y; 135 var c=this._chars; 136 this.x=x; this.y=y; 137 for (var i=0;i<c.length;i++){ 138 l=c[i]; l.setLocation(l.x+byX,l.y+byY); 139 } 140 }; 141 p.setText=function(t,animBy,delay){ 142 this._text=t||''; 143 this.setDelay(delay); 144 this.animateBy(animBy); 145 }; 146 p.setVisible = function(b){ 147 var c=this._chars; 148 this.visible=b; 149 for (var i=0;i<c.length;i++) c[i].setVisible(b); 150 }; 151 152 // Trigger Events 153 var fn = function(e){ 154 var o=e.getSource(); 155 o._ta._inUse--; 156 if(!o._ta._inUse) window.setTimeout(o._ta+'.invokeEvent("animfinish")',55); 157 }; 158 TextAnimation._tiggerEvents = { 159 onpathfinish:fn, 160 onfadein:fn, 161 onfadeout:fn 162 }; 163 164 165 // Effects 166 // ------------------------ 167 // Apear 168 p.appear = function(){ 169 var i,ext,c=this._chars; 170 this._exec(this+'.invokeEvent("animstart")',1); 171 for (i=0;i<c.length;i++) { 172 if(!this._inUse) c[i].setVisible(false); 173 if(i==(c.length-1)) ext=c[i]+'.invokeEvent("pathfinish")'; 174 this._exec(c[i]+'.setVisible(true);;'+ext,i); 175 } 176 this._inUse++; 177 }; 178 // Bounce 179 p.bounce = function(h,modifier){ 180 var i,l,c; 181 c=this._chars; 182 h=(h||100); 183 modifier=(modifier<-1)? -1:(modifier||0); 184 this._exec(this+'.invokeEvent("animstart")',1); 185 // setup bounce chars 186 for (i=0;i<c.length; i++) { 187 l=c[i]; 188 l._bonctmr=i<<modifier; 189 l._boncyv=0; 190 l._boncmaxv=8; 191 l._boncy=-l.h; 192 l.setLocation(null,this.y-h); 193 if(!this._inUse) l.setVisible(true); 194 this._exec(this+'._startBounce('+i+','+h+');',i); 195 } 196 this._inUse++; 197 }; 198 p._startBounce = function(i,h){ 199 var l,y,c,ext; 200 var c=this._chars; 201 l=c[i]; 202 if (l._bonctmr>0) l._bonctmr--; 203 else { 204 yv=l._boncyv; 205 //y=l._boncy; 206 l._boncy+=yv; 207 if (yv<l._boncmaxv) l._boncyv++; 208 if (l._boncy>h-l.h) { 209 l._boncy=h-l.h; 210 l._boncyv=-l._boncyv; 211 if (l._boncmaxv>0) l._boncmaxv--; 212 } 213 l.setLocation(null,(this.y-h)+l._boncy+l.h); 214 } 215 216 if(l._boncmaxv!=0){ 217 this._exec(this+'._startBounce('+i+','+h+');'+ext,1); 218 } 219 else if(i==(c.length-1)) { 220 this._exec(l+'.invokeEvent("pathfinish")',1); 221 } 222 }; 223 // Fade In 224 p.fadeIn = function(inc,ms){ 225 var i,c=this._chars; 226 this._exec(this+'.invokeEvent("animstart")',1); 227 for (i=0;i<c.length;i++) this._exec(c[i]+'.fadeIn('+inc+','+ms+');',i); 228 this._inUse++; 229 }; 230 // Fade Out 231 p.fadeOut = function(inc,ms){ 232 var i,c=this._chars; 233 this._exec(this+'.invokeEvent("animstart")',1); 234 for (i=0;i<c.length;i++) this._exec(c[i]+'.fadeOut('+inc+','+ms+');',i); 235 this._inUse++; 236 }; 237 // Fly From 238 p.flyFrom = function(x,y,inc,ms){ 239 var i,l,c=this._chars; 240 this._exec(this+'.invokeEvent("animstart")',1); 241 for (i=0;i<c.length;i++) { 242 l=c[i]; 243 this._exec( 244 ((!this._inUse)? l+'.setVisible(true);':'') 245 +l+'.slideTo('+l.x+','+l.y+','+inc+','+ms+');' 246 ,i); 247 l.setLocation(x,y); 248 } 249 this._inUse++; 250 }; 251 p.zoomText = function(from,to,inc,ms){ 252 var i,l,c; 253 c=this._chars; 254 this._exec(this+'.invokeEvent("animstart")',1); 255 // setup chars 256 for (i=0;i<c.length; i++) { 257 l=c[i]; 258 l._zTo = to||20; 259 l._zFrom = from||10; 260 l._zMs=(ms)? ms:50; 261 l._zInc=(inc)? Math.abs(inc):5; 262 l.css.fontSize=l._zFrom+'px'; 263 if (l._zFrom>l._zTo) l._zInc*=-1; 264 if(!this._inUse) l.setVisible(true); 265 this._exec(this+'._startZoom('+i+');',i); 266 } 267 this._inUse++; 268 }; 269 p._startZoom= function(i){ 270 var l,y,c,ext; 271 var l=this._chars[i]; 272 var inc = l._zInc; 273 var from = l._zFrom; 274 var to = l._zTo; 275 from+=inc; 276 if ((inc<0 && from<=to)|| (inc>0 && from>=to)) from=to; 277 l._zFrom=from; 278 l.css.fontSize=from+'px'; 279 l.setSize(0,0); // ?? 280 l.setSize(l.getContentWidth(),l.getContentHeight()); 281 if(i==0) l.setLocation(null,this.y-(l.h/2)); 282 else l.setLocation(this._chars[i-1].x+this._chars[i-1].w,this.y-(l.h/2)); 283 if(from!=to) l._zTmr=window.setTimeout(this+'._startZoom('+i+')',l._zMs); 284 else if(i==(this._chars.length-1)) { 285 this._exec(l+'.invokeEvent("pathfinish")',1); 286 } 287 }; 288 289 290 // to-do: 291 p.wave = function(){}; 292 p.nudge = function(){}; 293 p.quake = function(){};
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 17:20:01 2007 | par Balluche grâce à PHPXref 0.7 |