Próbuje napisać funkcje do animacji bez użycia bibliotek.
Elementy animowane poruszaja sie tylko linearnie (narazie) a wsparciem dla opacity i kolorkow zajme si pozniej.
Problem jest w tym że nie działają 2 funkcje jednocześnie(a dokładniej jedna funkcja dla 2 wlaściwości css w firefox i safari).
Na dodatek gdy przekazuje this jako argument do funkcji zwrotnej to nie dziala.
A zapomniałbym funkcja ma miec swój odpowiednik stop() z jquery,zamiast ustawiac czas wykonania ustawiam predkosc.
Domyślam sie że problemem jest to że dodaje timer jako jedna metode do obiektu animowanego,tylko nie wiem jak to obejsc....
Wszystkie pozostałe sugestie mile widziane:)
http://jsfiddle.net/q2n34/1/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> #przyklad { background-color: #00C; height: 100px; width: 100px; border: 3px solid #000; position: absolute; left: 4px; top: 22px; right: 0px; bottom: 0px; margin: 0px; padding: 0px; } #przyklad2 { height: 50px; width: 100px; position: absolute; top: 185px; } </style> <script type="text/javascript"> window.onload=function(){ function getCss(obiekt,wlasnosc){ if (obiekt.currentStyle){ return obiekt.currentStyle[wlasnosc]; }else if(window.getComputedStyle){ return document.defaultView.getComputedStyle(obiekt, null)[wlasnosc];} }; //koniec get css function animate(obiekt,wlasnosc,koncowa,speed,callback){ if(!speed){var speed=1;} var startowa=parseFloat(getCss(obiekt,wlasnosc)); if(koncowa.indexOf('px')!==-1){var jednostka='px'} else if(koncowa.indexOf('%')!==-1){var jednostka='%'} else {var jednostka='';} var koncowa=parseFloat(koncowa); obiekt.style[wlasnosc]=startowa+jednostka; var step=((Math.max(startowa,koncowa)-Math.min(startowa,koncowa))/100)*speed; (function(){ var biezaca=parseFloat(obiekt.style[wlasnosc]); if (koncowa<biezaca){ obiekt.style[wlasnosc]=biezaca-step+jednostka; } else if(biezaca<koncowa){ obiekt.style[wlasnosc]=biezaca+step+jednostka; } obiekt.timer=setTimeout(arguments.callee,10); if(biezaca>(koncowa-step)&&biezaca<(koncowa+step)) { obiekt.style[wlasnosc]=koncowa+jednostka; clearTimeout(obiekt.timer); if(callback){ return (callback )(); } } })(); } var element=document.getElementById('przyklad'); var element2=document.getElementById('przyklad2'); element.onclick=function(){ var elem=this; animate(elem,'left','200px',2,function(){animate(elem,'height','300px',3)}); animate(elem,'padding','50px',2); } function stop(obiekt){ clearTimeout(obiekt.timer); } element2.onclick=function(){ stop(element); } } </script> </head> <body> <input name="guzik" type="button" value="stop" id="przyklad2"/> </body> </html>