Utiliser un système de tabulation est un moyen moderne et attrayant de placer beaucoup de contenu dans un espace restreint. Ce tutoriel vous montrera comment créer un système de tabulations animé et sexy avec des sprites CSS, des cookies et un échange de tabulations animé..
Il y a quelques hypothèses et notes que nous entrons dans ce système avec:
Le didacticiel suppose également une connaissance de base de javascript. Une petite expérience de MooTools ou du framework JavaScript vous aidera.
Alors, comment ce système génial va-t-il fonctionner? Voici le schéma de base:
Le système lui-même est assez résistant aux balles. Si l'utilisateur n'autorise pas les cookies, l'onglet de départ pour chaque liste sera toujours 0.
Si la prise en charge de JavaScript n'est pas présente, les onglets ne seront pas visibles à l'écran car ils s'afficheront: aucun; les initialement.
Le code HTML permettant de réaliser le système de tabulation et les éléments de contenu correspondants est d'une structure incroyablement simple.
- Onglet 1
- Onglet 2
- Onglet 3
- Onglet 4
- Ceci est le contenu de l'onglet 1.
- Ceci est le contenu de l'onglet 2.
- Ceci est le contenu de l'onglet 3.
- Ceci est le contenu de l'onglet 4.
Nous modifierons le code HTML ci-dessus avec PHP ultérieurement dans ce didacticiel afin de créer un système plus robuste..
Comme avec tout combo CSS et HTML, vous pouvez styler les onglets et leurs éléments de contenu comme vous le souhaitez.
J'ai choisi d'utiliser des sprites CSS de style Facebook pour mes exemples d'onglets..
Réalisez que vous voudrez styler les éléments suivants d'une manière spécifique pour que le système fonctionne:
/ * structure des onglets * / .tab-container width: 320px; fond: #eee; rembourrage: 5px 10px; ul.tabs list-style-type: none; marge: 0; rembourrage: 0; ul.tabs li float: left; marge: 10px 5px 0 0; ul.tabs li a padding: 5px 10px; bordure: 1px solide #ddd; poids de police: gras; background: url (tab-sprite.jpg) 0 0 repeat-x; couleur: # 000; texte-décoration: aucun; ul.tabs li a.active border-color: # 028433; position d'arrière-plan: 0 -96px; couleur: #fff; / * sprite! changement de position en arrière-plan * / ul.tabs li a.active:hover text-decoration: none; curseur: par défaut; ul.tabs li: hover text-decoration: underline; ul.tabs-content margin: 10px 0 0 0; rembourrage: 0; ul.tabs-content li hauteur: 0; débordement caché; marge: 0; rembourrage: 0; / * efface les flottants * / div.clear clear: both; / * c'est-à-dire corrige * / * html ul.tabs-content li float: left; / * ie6 * / * + html ul.tabs-content li largeur: 99%; float: gauche; / * ie7 * /
Notez que nous devons implémenter quelques correctifs spécifiques à Internet Explorer. moche, mais nécessaire.
L'un des grands avantages de MooTools est le puissant système Class.
Les classes MooTools permettent des fonctionnalités flexibles, organisées et extensibles.
Notre classe MooTools s'appellera "TabSet". Puisque la classe TabSet effectue de nombreuses actions,
permet de décomposer chaque partie de la classe.
La première ligne donne toujours un nom à la classe:
/ * donne un nom à la classe * / var TabSet = new Class (
Ensuite, nous devons créer un objet qui contiendra les options de notre classe:
options: // options d'onglet par défaut activeClass: 'active', // css class cookieName: ", // no name signifie pas de cookie cookieOptions: // options pour le cookie, si la durée de recherche du cookie est: 30, // 30 jours path: '/', startIndex: 0 // commence avec cet élément si aucun cookie ou actif,
Nos options nous permettent de définir:
Avec seulement trois options dans la classe, TabSet serait considéré comme une classe relativement simple..
Ensuite, nous implémentons deux options et événements:
Implémente: [Options, Evénements],
La mise en œuvre des options et des événements nous permettra de gérer correctement les options données et
déclenchez des événements de chargement et de modification personnalisés sur nos listes où que vous soyez.
Ensuite, nous définissons la méthode "initialize" qui s’exécute à la création de chaque instance de la classe:
initialize: function (onglets, contenu, options) // gérer les arguments this.setOptions (options); // mélange les options données avec les options par défaut this.tabs = $$ (tabs); // enregistre les onglets donnés dans la classe this.contents = $$ (contents); // enregistre le "contenu" donné dans la classe // détermine l'onglet "actif" var actif = (Cookie.read (this.options.cookieName) || this.options.startIndex); // décide de l'index qui doit être initialement actif this.activeTab = this.tabs [active] .addClass (this.options.activeClass); // identifie maintenant l'onglet "actif" this.activeContent = this.contents [active] .setStyle ('height', 'auto'); // identifie le contenu "actif" // exécute chaque onglet / contenu par la méthode "processItem" que nous verrons ci-dessous this.tabs.each (fonction (tab, i) this.processItem (tab, this.contents [i], i);, ceci); // les onglets sont prêts - déclenche l'événement load! this.fireEvent ('load'); ,
Vient ensuite la méthode workhorse de notre classe TabSet: processItem:
processItem: fonction (onglet, contenu, i) var contentHeight = content.getScrollSize (). y; // ajoute un événement de clic à l'onglet tab.addEvent ('clic', function () // si ce n'est pas l'onglet actif if (tab! = this.activeTab) // stopper if (e) e.stop ( ); // supprime la classe active de l'onglet actif this.activeTab.removeClass (this.options.activeClass); // rend l'onglet sélectionné (l'onglet.activeTab = onglet) .addClass (this.options.activeClass) ; // interpole le contenu de l'ancien onglet // entre le nouveau contenu et this.activeContent.set ('tween', onComplete: function () this.activeContent = content.fade ('in'). set ('tween ', onComplete: $ empty). tween (' height ', contentHeight); // déclenche l'événement de changement d'onglet this.fireEvent (' change ', [tab, contenu]); .bind (this)). setStyles (height: contentHeight, débordement: 'hidden'). fade ('out'). tween ('height', 0); // enregistre l'index dans un cookie si (this.options.cookieName) Cookie.write ( this.options.cookieName, i); .bind (this)); );
Voici le schéma de base de la méthode processItem:
Et maintenant, un exemple d'utilisation de notre classe:
window.addEvent ('domready', function () var tabset = new TabSet ($$ ('# tabs1 li a'), $$ ('# # content1 li'), cookieName: 'liste de démonstration'); );
Nous fournissons à notre instance l'onglet LI A et le contenu LI. Nous fournissons également l'argument des options facultatives. Voilà comment il est facile d'utiliser cette classe! Voici la classe complète avec l'utilisation:
/ * class * / var TabSet = nouvelle classe (options: activeClass: 'active', // css class cookieName: ", cookieOptions: durée: 30, // chemin de 30 jours: '/', startIndex: 0 // commence par cet élément s'il n'y a pas de cookie ou d'actif, Implémente: [Options, Événements], initialize: function (onglets, contenu, options) // gère les arguments this.setOptions (options); this.tabs = $$ ( tabs); this.contents = $$ (contenu); // détermine l'onglet "actif" var active = (Cookie.read (this.options.cookieName) || this.options.startIndex); this.activeTab = this. tabs [active] .addClass (this.options.activeClass); this.activeContent = this.contents [active] .setStyle ('height', 'auto'); // traite chaque onglet et le contenu this.tabs.each (fonction (tab, i) this.processItem (tab, this.contents [i], i);, this); // les onglets sont prêts - chargez-le! this.fireEvent ('load');, processItem: fonction (onglet, contenu, i) var contentHeight = content.getScrollSize (). y; // ajoute un événement de clic à l'onglet tab.addEvent ('clic', fonction (e) // stop! if (e) e.stop (); // si ce n'est pas le onglet actif if (tab! = this.activeTab) // supprime la classe active de l'onglet actif this.activeTab.removeClass (this.options.activeClass); // transforme l'onglet actif en onglet actif (this.activeTab = tab) .addClass (this.options.activeClass); // interpole l'ancien contenu de l'onglet // entre le nouveau contenu et this.activeContent.set ('tween', onComplete: function () this.activeContent = content.fade ('in'). set ('tween' , onComplete: $ empty). tween ('height', contentHeight); // déclenche l'événement de changement d'onglet this.fireEvent ('change', [tab, contenu]); .bind (this)). setStyles (height: contentHeight, overflow: 'hidden'). fade ('out'). tween ('height', 0); // sauvegarde l'index dans le cookie if (this.options.cookieName) Cookie.write (this.options.cookieName, i, this.options.cookieOptions); .bind (this)); ); / * usage * / window.addEvent ('load', fonction () var tabset = new TabSet ($$ ('# tabs1 li a' '), $$ (' # # content1 li '), cookieName:' demo- liste' ); );
Rappelez-vous comment j'ai dit que nous modifierions notre code HTML original avec PHP? C'est le moment. Depuis que nous peut
avoir un cookie défini pour notre TabSet, nous devrions essayer de détecter cela lorsque nous produisons l'onglet HTML.
Pourquoi? Parce que nous voulons que les onglets se chargent en douceur. Nous souhaitons également répondre aux besoins des utilisateurs pour lesquels JavaScript ou les cookies ne sont pas activés..
Sans ce PHP, vous remarquerez peut-être un léger "saut" dans la zone de contenu actif.
- " > Onglet 1
- " > Onglet 2
- " > Onglet 3
- " > Onglet 4
- > Ceci est le contenu de l'onglet 1. Ceci est le contenu de l'onglet 1. Ceci est le contenu de l'onglet 1. Ceci est le contenu de l'onglet 1. Ceci est le contenu de l'onglet 1. Ceci est le contenu de l'onglet 1. Ceci est le contenu de l'onglet 1. Ceci est le contenu de l'onglet 1.
- > Ceci est le contenu de l'onglet 2. Ceci est le contenu de l'onglet 2. Ceci est le contenu de l'onglet 2. Ceci est le contenu de l'onglet 2. Ceci est le contenu de l'onglet 2. Ceci est le contenu de l'onglet 2. Ceci est le contenu de l'onglet 2. Ceci est le contenu de l'onglet 2.
- > Ceci est le contenu de l'onglet 3. Ceci est le contenu de l'onglet 3. Ceci est le contenu de l'onglet 3. Ceci est le contenu de l'onglet 3. Ceci est le contenu de l'onglet 3. Ceci est le contenu de l'onglet 3. Ceci est le contenu de l'onglet 3. Ceci est le contenu de l'onglet 3.
- > Ceci est le contenu de l'onglet 4. Ceci est le contenu de l'onglet 4. Ceci est le contenu de l'onglet 4. Ceci est le contenu de l'onglet 4. Ceci est le contenu de l'onglet 4. Ceci est le contenu de l'onglet 4. Ceci est le contenu de l'onglet 4. Ceci est le contenu de l'onglet 4.
Certains utilisateurs n'activent pas JavaScript ni les cookies pour des raisons de sécurité. Nous souhaitons toujours que notre système fonctionne pour eux. Si vous vous rappelez du bloc de code précédent,
nous utilisons des liens avec une clé de chaîne de requête de "liste de démonstration" pour indiquer un changement d'onglet. Le bloc suivant de PHP en haut de la page (avant TOUT type de sortie) sera
aidez-nous à changer la valeur du cookie dans l'onglet demandé.
Notez que nous actualisons la page uniquement si nous pouvons vérifier que le cookie a été défini. Si le cookie n'a pas été défini, les cookies de l'utilisateur sont désactivés.
Voici un résumé rapide des avantages de la classe MooTools TabSet:
J'ai toujours préconisé de coder une fonctionnalité MooTools souhaitée "en ligne" avant de la transformer en classe. Voici le code JavaScript MooTools intégré:
$$ ('ul.tabs'). each (function (tabList) // récupère la liste de contenus var tabContentList = tabList.getNext ('ul.tabs-content'), // récupère le nom du cookie, qui est l'attribut "title" de la liste d'onglets cookie = 'demo-list', // l'index d'onglet de départ startIndex = Cookie.read (cookie) || 0, // récupère les éléments d'onglet actuels LIs title ', "). getElements (' li '), // récupère le contenu des éléments LI lis = tabContentList.getElements (' li '), // l'onglet (LI) actuellement actif activeTab = tabs [startIndex] .addClass ('active'), // le contenu LI actuellement actif activeContent = lis [startIndex] .setStyle ('height', 'auto'); // pour chaque onglet de cet onglet / relation de contenu… tabs.each (fonction (tab, i) // stopper if (e) e.stop (); // calcule la hauteur de l'élément de contenu respectif var content = lis [i], contentHeight = content.getScrollSize (). y; // ajoutez le clic. événement à l'onglet qui… tab.addEvent ('clic', fonction () // si ce n'est pas l'onglet actuellement activé… if (tab! = activeTab) // add and remove la classe active de l'ancien vs nouvel onglet activeTab.removeClass ('active'); (activeTab = tab) .addClass ('active'); // lance l'effet wc up up, wipe down actifContent.set ('tween', onComplete: function () activeContent = content.fade ('in'). set ('tween', onComplete: $ empty). tween ('hauteur', contentHeight);). setStyles (hauteur: contentHeight, débordement: 'caché'). fade ('out'). tween ('hauteur', '0'); // écrit dans le cookie Cookie.write (cookie, i); //ailette! ); ); // déclenche l'événement click activeTab.fireEvent ('click'); );
Notez que toutes les instructions "var" en haut deviennent des arguments ou des options pour la classe. La transition de MooTools JavaScript intégré à une classe est extrêmement simple!
Vous avez plus d'idées pour ce cours? Assurez-vous de les partager dans les commentaires ci-dessous!
Saviez-vous que vous pouvez gagner jusqu'à 600 USD en écrivant un tutoriel et / ou un screencast PLUS pour nous?? Nous recherchons des didacticiels détaillés et bien écrits sur HTML, CSS, PHP et JavaScript. Si vous en avez la possibilité, veuillez contacter Jeffrey à l'adresse [email protected]..
Veuillez noter que la rémunération réelle dépendra de la qualité du didacticiel final et du screencast..