46 lines
5.2 KiB
JavaScript
46 lines
5.2 KiB
JavaScript
/*
|
||
Licencováno pod MIT Licencí
|
||
|
||
© 2008 Seznam.cz, a.s.
|
||
|
||
Tímto se uděluje bezúplatná nevýhradní licence k oprávnění užívat Software,
|
||
časově i místně neomezená, v souladu s příslušnými ustanoveními autorského zákona.
|
||
|
||
Nabyvatel/uživatel, který obdržel kopii tohoto softwaru a další přidružené
|
||
soubory (dále jen „software“) je oprávněn k nakládání se softwarem bez
|
||
jakýchkoli omezení, včetně bez omezení práva software užívat, pořizovat si
|
||
z něj kopie, měnit, sloučit, šířit, poskytovat zcela nebo zčásti třetí osobě
|
||
(podlicence) či prodávat jeho kopie, za následujících podmínek:
|
||
|
||
- výše uvedené licenční ujednání musí být uvedeno na všech kopiích nebo
|
||
podstatných součástech Softwaru.
|
||
|
||
- software je poskytován tak jak stojí a leží, tzn. autor neodpovídá
|
||
za jeho vady, jakož i možné následky, ledaže věc nemá vlastnost, o níž autor
|
||
prohlásí, že ji má, nebo kterou si nabyvatel/uživatel výslovně vymínil.
|
||
|
||
|
||
|
||
Licenced under the MIT License
|
||
|
||
Copyright (c) 2008 Seznam.cz, a.s.
|
||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
of this software and associated documentation files (the "Software"), to deal
|
||
in the Software without restriction, including without limitation the rights
|
||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
copies of the Software, and to permit persons to whom the Software is
|
||
furnished to do so, subject to the following conditions:
|
||
|
||
The above copyright notice and this permission notice shall be included in
|
||
all copies or substantial portions of the Software.
|
||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
THE SOFTWARE.
|
||
*/{SZN.Interpolator=SZN.ClassMaker.makeClass({"NAME":"Interpolator","VERSION":"1.0","CLASS":"class"});SZN.Interpolator.LINEAR=1;SZN.Interpolator.QUADRATIC=2;SZN.Interpolator.SQRT=3;SZN.Interpolator.SIN=4;SZN.Interpolator.ASIN=5;SZN.Interpolator.prototype.$constructor=function(startVal,endVal,interval,callback,options){this.startVal=startVal;this.endVal=endVal;this.interval=interval;this.callback=callback;this.options={"interpolation":SZN.Interpolator.LINEAR,"frequency":20,"endCallback":false};this.running=false;this._tick=SZN.bind(this,this._tick);for(var p in options){this.options[p]=options[p];}};SZN.Interpolator.prototype._call=function(frac){var result=this._interpolate(frac);var delta=this.endVal-this.startVal;this.callback(this.startVal+delta*result);};SZN.Interpolator.prototype._interpolate=function(val){if(typeof (this.options.interpolation)=="function"){return this.options.interpolation(val);}switch(this.options.interpolation){case SZN.Interpolator.QUADRATIC:return val*val;case SZN.Interpolator.SQRT:return Math.sqrt(val);case SZN.Interpolator.SIN:return (Math.sin(Math.PI*(val-0.5))+1)/2;case SZN.Interpolator.ASIN:return (Math.asin(2*(val-0.5))+Math.PI/2)/Math.PI;default:return val;}};SZN.Interpolator.prototype.start=function(){if(this.running){return;}this.running=true;this.startTime=(new Date()).getTime();this._call(0);this.handle=setInterval(this._tick,this.options.frequency);};SZN.Interpolator.prototype.stop=function(){if(!this.running){return;}this.running=false;clearInterval(this.handle);};SZN.Interpolator.prototype._tick=function(){var now=(new Date()).getTime();var elapsed=now-this.startTime;if(elapsed>=this.interval){this.stop();this._call(1);if(this.options.endCallback){this.options.endCallback();}}else{this._call(elapsed/this.interval);}};SZN.CSSInterpolator=SZN.ClassMaker.makeClass({"NAME":"CSSInterpolator","VERSION":"1.0","CLASS":"class"});SZN.CSSInterpolator.prototype.$constructor=function(elm,interval,options){this.elm=elm;this.properties=[];this.colors=[];this._tick=SZN.bind(this,this._tick);this.interpolator=new SZN.Interpolator(0,1,interval,this._tick,options);};SZN.CSSInterpolator.prototype.addProperty=function(property,startVal,endVal,suffix){var o={"property":property,"startVal":startVal,"endVal":endVal,"suffix":suffix||""};this.properties.push(o);};SZN.CSSInterpolator.prototype.addColorProperty=function(property,startVal,endVal){var o={"startVal":SZN.Parser.color(startVal),"endVal":SZN.Parser.color(endVal),"property":property};this.colors.push(o);};SZN.CSSInterpolator.prototype.start=function(){this.interpolator.start();};SZN.CSSInterpolator.prototype.stop=function(){this.interpolator.stop();};SZN.CSSInterpolator.prototype._tick=function(frac){for(var i=0;i<this.properties.length;i++){var prop=this.properties[i];var val=prop.startVal+frac*(prop.endVal-prop.startVal);val+=prop.suffix;this.elm.style[prop.property]=val;}var names=["r","g","b"];for(var i=0;i<this.colors.length;i++){var c=this.colors[i];var out=[0,0,0];for(var j=0;j<names.length;j++){var name=names[j];out[j]=c.startVal[name]+Math.round(frac*(c.endVal[name]-c.startVal[name]));}var result="rgb("+out.join(",")+")";this.elm.style[c.property]=result;}};}
|