/* * Clean Css Animation für jQuery von pfirsichmelba.de // Alexander Farkas * * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * Bei guten Verbesserungen/öffentlichem Einsatz wäre ich für eine kurze Mail mit Link dankbar. */ jQuery.fn.CleanCSSAnimation = function(_animetyp,$arg1,$arg2,$arg3,$arg4) { var $args = new Array($arg1,$arg2,$arg3,$arg4); //Position der Callback-Funktion ist in der Regel der 2. Parameter (1), bei Animate, jedoch der 3. (2) //Für Interface-Nutzer weitere Ausnahmeregeln: (_animetyp == "animate" || _animetyp == "Pulsate" || _animetyp == "Fold" || _animetyp == "UnFold" || _animetyp == "UnFold" || _animetyp == "Highlight") ? $fnpos = 2 : $fnpos = 1; (_animetyp == "animate") ? $fnpos = 2 : $fnpos = 1; var $cbfn = ""; //Ist eine CallbackFunktion definiert, wird Sie und ihre Position gespeichert (überschreibt also die beiden Zeilen davor) //Hier wird lediglich die Position ermittelt jQuery.each($args,function(o){ if(typeof this == "function"){ //Sichern der eigentlichen Callback-Funktion $cbfn = $args[o]; $fnpos = o; } return; }); //Eigentliches Ersetzen der Callbackfunktion mit der Cleanerfunktion an der erwarteten bzw. ermittelten Position; die alte wird als Parameter übergeben $args.splice($fnpos, 1, function(){_apllyOldCallback(this,$cbfn)}); return this.each(function(){ //Verschmutzen des inline-css: vor Animation unMakeInlineCSS(this,'pre'); //Aufruf der jQuery-Animation jQuery(this)[ _animetyp ].apply( jQuery(this), $args ); }); }; //Eigentliche Säuberungsfunktion function unMakeInlineCSS($elem,$when){ //Name der css-class die statt display: none/display:block verwendet werden soll. var $nodisClass = "displaynone"; var $disClass = "displayblock"; if($when == "pre") { if(jQuery($elem).is('.'+$nodisClass)) jQuery($elem).css("display","none").removeClass($nodisClass); else if(jQuery($elem).is('.'+$disClass)) jQuery($elem).css("display","block").removeClass($disClass); } else if($when == "post") { if(jQuery($elem).css("display") == "none") jQuery($elem).addClass($nodisClass).css("display",""); else if(jQuery($elem).css("display") == "block") jQuery($elem).addClass($disClass).css("display",""); } }; // Callbackfunktion startet Säuberung und falls vorhanden die vom Autoren definierte Callbackfunktion function _apllyOldCallback($elem,$cbfn){ //Säubern unMakeInlineCSS($elem,"post"); // Einige Plugin-Effekte (z.B. Interface) rufen die Callback-Funktion auf, bevor die Funktion wirklich beendet wurde -> obigen Säuberungsaufruf löschen und durch folgenden ersetzen /* _glob_cleancssele = $elem; window.setTimeout("unMakeInlineCSS(_glob_cleancssele,"post")", 3); */ //Wenn eine Callback-Funktion definiert wurde, kann sie jetzt ausgeführt werden if(typeof $cbfn == "function") $cbfn.apply($elem); };