Animation de KO

Knockout.js est ne pas une bibliothèque d'animation. Toutes les mises à jour automatiques de Knockout.js sont immédiatement appliquée chaque fois que les données sous-jacentes changent. Pour animer ses modifications, nous devons creuser dans les éléments internes de Knockout.js et créer manuellement des transitions animées à l'aide d'un autre framework JavaScript tel que jQuery ou MooTools. Cette leçon est restée fidèle aux routines d’animation de jQuery, mais les concepts présentés s’appliquent également à d’autres bibliothèques d’animation..


Retour du panier

Pour cette leçon, nous allons revenir à une version simplifiée de notre exemple de panier d'achat. Créez un nouveau fichier HTML avec le contenu suivant. Nous ne ferons aucune demande AJAX, alors n'hésitez pas à la placer n'importe où sur votre ordinateur. Cependant, nous utiliserons les routines d’animation de jQuery. Veillez donc à inclure un lien vers votre copie de la bibliothèque jQuery..

   Animation de Knockout.js     

Produit Prix

Espérons que tout cela est en revue maintenant. Nous avons un tableau observable contenant un tas de produits, un pour chaque reliure qui affiche chacun d'eux, et un bouton pour ajouter plus d'articles au panier.


Liste des rappels

Knockout.js est une bibliothèque d'interface utilisateur puissante, mais une fois que vous la combinez avec les fonctionnalités d'animation d'un framework tel que jQuery ou MooTools, vous êtes prêt à créer des interfaces utilisateur vraiment époustouflantes avec un minimum de balises. Dans un premier temps, nous examinerons l’animation de listes, puis la section suivante présente un moyen plus générique d’animer des composants de vue..

le pour chaque la liaison a deux callbacks nommés avantRetirer et afterAdd. Ces fonctions sont exécutées avant qu'un élément ne soit supprimé de la liste ou après son ajout à la liste, respectivement. Cela nous donne l’occasion d’animer chaque élément avant que Knockout.js ne manipule le DOM. Ajouter les rappels au élément comme tel:

 

Au lieu d’une propriété, notre pour chaque La liaison prend maintenant un littéral d'objet en tant que paramètre. Les paramètres Les données property pointe sur le tableau que vous souhaitez afficher et les propriétés beforeRemove et afterAdd pointent sur les fonctions de rappel souhaitées. Ensuite, nous devrions définir ces rappels sur le ShoppingCart ViewModel:

 this.showProduct = function (element) if (element.nodeType === 1) $ (element) .hide (). fadeIn (); ; this.hideProduct = function (element) if (element.nodeType === 1) $ (element) .fadeOut (function () $ (element) .remove ();); ;

le showProduct () callback utilise jQuery pour faire en sorte que de nouveaux éléments de la liste s’affichent progressivement. hideProduct () callback les supprime, puis les supprime du DOM. Les deux fonctions prennent l’élément DOM affecté comme premier paramètre (dans ce cas, c’est un élément). Les instructions conditionnelles garantissent que nous travaillons avec un élément à part entière et non un simple nœud de texte.

Le résultat final devrait être des éléments de liste qui effectuent une transition en douceur vers et hors de la liste. Bien sûr, vous êtes libre d'utiliser l'une des autres transitions de jQuery ou d'effectuer un post-traitement personnalisé dans l'un des rappels..


Liaisons personnalisées

le pour chaque Les rappels fonctionnent très bien pour animer des listes, mais malheureusement, d'autres liaisons ne proposent pas cette fonctionnalité. Donc, si nous voulons animer d'autres parties de l'interface utilisateur, nous devons créer Douane les liaisons qui ont l'animation intégrée directement dans eux.

Les liaisons personnalisées fonctionnent comme les liaisons par défaut de Knockout.js. Par exemple, considérons les champs de formulaire suivants:

 

Nécessite des instructions de manipulation spéciales

La case à cocher agit comme une bascule pour le