Slide-Out Navigation Part 2
In meinem letzten Beitrag habe ich eine Implementierung einer Slide-Out Navigation mit jQuery und reinem CSS3 gezeigt. Heute zeige ich euch, wie man mit Hilfe der kleinen JavaScript Library Velocity.js die Vorzüge von javaSript und die Hardwarebeschleunigung von CSS3 vereinen könnt.
Was ist Velocity.js
Velocity.js ist ein kleines Framework, welches mittlerweile auch Stand-Alone ohne jQuery auskommt. Es dient zum Animieren von DOM-Objekten. Dabei hat sich der Entwickler das Ziel gesetzt, das Ganze so performant wie möglich umzusetzen. Velocity.js ist von Haus aus hardware beschleunigt. Mit Hilfe des sogenannten forcefeedings wird das gefürchtete Layout Thrashing (also das ständige Neuberechnen der DOM-Objekte, wie es beispielhaft bei der .animate() Funktion von jQuery vorkommt) vermieden. Dazu gibt man zu dem Zielwert auch einen Startwert an. In unseren Fall bietet sich als Beispiel wieder "translateX" an. Doch die Syntax sieht erst einmal kryptisch aus:
$('body') .velocity({ translateX: [285, 0] }, 400, 'easeInOut');
Das 'reverse' Attribut
Eine weitere Besonderheit von Velocity.js ist, dass die Library sich die Animationen merkt und man mit den Parameter "reverse" die Animation rückgängig machen kann. Dabei kann man die Dauer der Animation einfach überschreiben.
$('body') .velocity('reverse', 200, 'snap');
Die Complete-Funktion
Zu guter Letzt kann man eine „complete"-Funktion übergeben, die als Callback fungiert, d.h., dass sobald die Animation beendet ist, diese ausgelöst wird. In diesem Beispiel lasse ich einen Log in der Console ausgeben:
$('body') .velocity('reverse', 200, 'snap', function() { console.log('Callback'); });
Hier könnt ihr euch den kompletten Code dieses Beispiels anschauen
Fazit
Ich kann euch nur raten, die kleine Library genauer anzuschauen. Dadurch, dass sie auch nur mit Vanilla.js funktioniert, können kleine Projekte ohne den Overload von jQuery oder andere mächtige Frameworks auskommen. Ich bin wirklich von Velocity.js begeistert und freue mich, es in Projekten einzusetzen.