Avec jQuery dominant le paysage des frameworks JavaScript, de nombreux nouveaux venus ne sont pas exposés aux autres frameworks JavaScript. La vérité est qu’il existe une pléthore d’excellents frameworks JavaScript, tels que MooTools, Prototype, Ext JS et… YUI! Bien que moins connu que certaines autres bibliothèques, YUI fournit une multitude d’outils au développeur Web. Aujourd'hui, nous allons faire un tour rapide de certaines de ses fonctionnalités..
YUI (abréviation de Yahoo User Interface et prononcé Y-U-I) est une librairie JavaScript et CSS à code source ouverte développée principalement par Yahoo.com. YUI inclut des fonctionnalités JavaScript, un framework CSS (réinitialisation, grille et polices), des widgets JavaScript et des outils permettant d’aider à inclure et à gérer vos modules..
Il existe actuellement deux versions prises en charge de YUI. YUI 2, qui a été lancé en 2006, contient la part du lion des widgets YUI. YUI 3 est sorti en 2009 et a une syntaxe complètement nouvelle, ce qui améliore grandement sa facilité d'utilisation (en particulier dans la gestion des événements et la traversée du DOM).
Alors vous vous demandez peut-être pourquoi je devrais même envisager d’apprendre un autre framework JavaScript? Chaque cadre a ses points forts, donc celui que vous choisirez dépendra de vos besoins. Voici deux choses que YUI a vraiment à faire:
Ok, maintenant que vous avez un peu entendu parler de YUI, commençons par regarder du code!
YUI permet une grande flexibilité lors du chargement de la bibliothèque. regardons quelques façons que vous pouvez le faire.
Le fichier de départ est le moyen privilégié pour obtenir YUI sur votre page. Incluez simplement le fichier de départ YUI (seulement ~ 6 Ko), puis incluez les modules de votre choix via JavaScript. Regardons un exemple:
YUI.use () fera une demande pour obtenir les modules requis et vous transmettra une instance YUI dans le rappel comprenant tous les modules requis. Les composants YUI 2 peuvent également être inclus en indiquant le nom du module, précédé de yui2-
. Si vous incluez un composant YUI 2, vous pouvez accéder à l'instance YUI 2 via Y.YUI2..
Cet outil Web vous permet de choisir les modules dont vous avez besoin et de télécharger ou de créer un lien vers un fichier simplifié contenant toutes ces dépendances (similaire à l'outil jQuery UI). Il fournit également des statistiques sur l'impact des fichiers sur le chargement des pages..
SimpleYUI est un outil récemment publié qui simplifie l'inclusion YUI pour ceux qui ont l'habitude d'inclure simplement une bibliothèque JavaScript et d'avoir accès à tout. Incluez simplement le fichier SimpleYUI et vous obtiendrez une instance globale de YUI mappée à la variable Y avec les modules d'effets DOM, AJAX et d'interface utilisateur disponibles.
Avec SimpleYUI, vous pouvez toujours utiliser tous les autres modules YUI de manière dynamique en les chargeant avec la méthode YUI.use.
Y.use ('dd-drag', function (Y) // configurer le glisser-déposer);
SimpleYUI a le potentiel d’aider réellement l’adoption de YUI car il est beaucoup plus accessible et familier aux programmeurs de bibliothèques telles que jQuery..
La manipulation du DOM est très facile dans YUI 3 et la syntaxe devrait être assez familière si vous avez déjà utilisé jQuery.
YUI fournit deux méthodes pour obtenir des nœuds DOM, via son module Node.
Voici un exemple.
// Y.one var noeud = Y.one ('# test-div'); // récupère le nœud avec l'id test-div var node2 = Y.one (document.body); // Y.one accepte également un élément DOM Y.one ('# ma liste'). Get ('id'); // ma-liste // Y.all tous les nœuds = Y.all ('# ma-liste li'); // tous les éléments de la liste de my-list // chaining var nodes2 = Y.one ('# my-list'). all ('li'); // tous les éléments de la liste de my-list var parent = Y.one ('# ma liste'). get ('parentNode'); // retourne le parent de my-list (en tant qu'objet Nœud YUI)
YUI fournit également un 'tester
'méthode pour voir si un élément correspond à un sélecteur
var node = Y.one ('# test-div'); // si le noeud a la classe primaire if (node.test ('. primaire')) doQuelque chose ();
YUI fournit également obtenir
et ensemble
méthodes pour manipuler les attributs de nœud et fonctions pratiques comme addClass
et removeClass
.
// récupère et définit Y.one ('# test-div'). get ('id'); Y.one ('# test-div'). Set ('innerHTML', 'Contenu du test'); // addClass, removeClass Y.one ('# test-div'). addClass ('en surbrillance'); // ajoute la classe à un div Y.all ('p'). removeClass ('en surbrillance'); // supprime la classe de tous les éléments p
Les événements sont attachés à l'aide de YUI sur
méthode. Vous pouvez appeler cette méthode sur un nœud ou sur l'instance YUI. Par exemple:
// appelé sur l'instance YUI // myevent | click espaces de noms ce gestionnaire onclick à myevent (utilisé pour la suppression ultérieure) Y.on ("myevent | click", function () // faire quelque chose, "#test p"); // appelé dans NodeList Y.all ("# test p"). on ("myevent | click", function () // faire quelque chose);
Une caractéristique intéressante de YUI est que si vous utilisez la méthode du premier exemple, il n’est pas nécessaire que le sélecteur ait immédiatement une correspondance. YUI continuera à rechercher une correspondance jusqu'à 15 secondes après le chargement de la page, ce qui signifie que vous n'avez pas à attendre que le document soit chargé pour l'utiliser (vous n'avez pas à emballer vos gestionnaires d'événements dans une fonction document.load).
Notez également que nous avons ajouté une chaîne facultative au type d’événement pour le type d’événement. Vous pouvez utiliser cela pour détacher ultérieurement l'événement si vous le souhaitez..
Y.all ("# test p"). Detach ("myevent | click");
Vous pouvez également simuler des événements…
Y.one ("# test"). Simuler ("cliquer");
… Et déclencher des événements personnalisés.
Y.one ("# test"). Fire ("myevents: custom_event_one");
YUI 3 prend également en charge les événements tactiles, ce qui vous permet d'ajouter un support à votre application JavaScript pour les appareils mobiles. Un des problèmes potentiels est que vous devez inclure le module "event-touch" utilisant YUI.on pour que les événements tactiles fonctionnent..
Y.one ("# test"). On ('touchstart', function () // un événement tactile a commencé);
Les requêtes AJAX sont traitées via le module IO de YUI 3. Un appel AJAX est fait en utilisant le io
fonction, comme démontré ci-dessous.
Y.io ('/ url / to / call', // il s'agit d'une méthode de publication: 'POST', // sérialise le formulaire: id: "my_form", useDisabled: true, // événement ajax lifecycle gestionnaires sur: complete: function (id, response) var data = response.responseText; // Data response.);
le IO
La méthode accepte une URL et un objet de configuration en tant que paramètres. L'objet de configuration est hautement configurable, mais j'ai inclus quelques-unes des options les plus courantes dans l'exemple ci-dessus..
YUI io
Ce module vous permet également d’envoyer des requêtes entre domaines à l’aide d’un fichier Flash fourni par Yahoo. Il y a cependant des mises en garde. Tout d'abord, vous devez disposer d'une copie du fichier flash YUI sur votre serveur pour pouvoir effectuer la demande. Deuxièmement, le domaine auquel vous accédez doit disposer d'un fichier de stratégie inter-domaines qui vous en autorise l'accès..
Y.io ('http: //www.somedomain/web/service/', méthode: 'POST', data: 'data = 123', // utilise flash xdr: use: 'flash', dataType: ' xml ' // Gestionnaires d'événements ajax Lifecycle sur: complete: function (id, response) var data = response.responseText; // data de réponse.);
JSONP est également pris en charge, mais à travers le YUI JSONP
module, pas le IO
module.
Y.jsonp (someurl, function (response) // gérer la réponse jsonp);
Un module supplémentaire qui est très utile avec AJAX est le module JSON. Cela vous permet d'analyser facilement les requêtes AJAX qui renvoient du JSON. JSON peut être analysé à l'aide de la méthode JSON.parse
var obj = Y.JSON.parse (response.responseText);
YUI 3 contient un module d'animation qui peut être utilisé pour réaliser à peu près n'importe quel type d'animation. La syntaxe est un peu différente de celle de jQuery, alors jetons un coup d'oeil.
Les animations se déroulent en quelques étapes dans YUI. Tout d'abord, vous configurez un nouvel objet d'animation décrivant votre animation, puis vous l'exécutez..
// animer une div de taille nulle à une hauteur et une largeur de 100 var animation = new Y.Anim (node: '# my-div', // sélecteur du nœud que vous souhaitez animer. // valeurs à partir desquelles vous animez (facultatif) à partir de: hauteur: 0, largeur: 0, // valeurs à animer également: hauteur: 100, largeur: 100, durée: 0,5, // réglage de la durée: Y.Easing.easeOut // set assouplissement); animation.run ();
Toutes les propriétés peuvent être modifiées en utilisant .obtenir()
et .ensemble()
sur l'objet animation, vous permettant de modifier l'animation ou les éléments DOM à animer. Les animations déclenchent également des événements qui peuvent également être écoutés.
// animation est un objet Y.Anim animation.on ('end', function () // déclenché à la fin de l'animation);
Pris ensemble, l'objet d'animation YUI peut être utilisé pour créer toutes sortes d'animations dans votre application..
Une des plus belles fonctionnalités de YUI est ses widgets. YUI 3 a actuellement un ensemble limité de widgets (onglets, curseur et superposition pour en nommer quelques-uns), mais fournit un cadre puissant pour créer vos propres widgets YUI 3. YUI 2, en revanche, possède une énorme bibliothèque de widgets. Voici quelques-uns:
Il existe de nombreux autres widgets que vous pouvez utiliser et que vous pouvez tous trouver sur le site Web du développeur YUI 2.
.
Le dernier composant que nous allons examiner rapidement concerne les bibliothèques CSS YUI. YUI 3 fournit quatre ressources CSS.
Ce n’était qu’un rapide aperçu de quelques-uns des composants et modules proposés par YUI. Si cet article a suscité votre intérêt, je vous recommande de vous reporter à la documentation pour les développeurs YUI et de rechercher les autres offres de YUI. Quelles sont vos impressions? Si vous avez déjà utilisé YUI par le passé, qu'en pensez-vous??