Table des matieres (X)

Chut, ca charge ...

Tutoriel Mootools 1.0 : Generation table des matieres


Et non je n'était pas mort, juste occupé alors me revoila ;)

Au programme aujourd'hui : un petit tutoriel Mootools 1.0 sur la génération d'une table des matières automatiquement .

Vous devriez normalement la voir sur la gauche de la page )

Alors pour information avant de commencer concernant les fonctionnalités :

  • Génération automatique en fonction des titres de la page et ajout des anchres dans la page
  • Possibilité de déplacer la table des matières en cliquant sur le titre
  • Repositionnement automatique toutes les secondes avec effet de transition
  • Testé sous Firefox 2.0, IE6, IE7 et Safari.
  • Normalement il devrait y avoir une effet de transition pour le scroll mais IE6 est pas très gentil alors j'ai désactivé pour l'instant

Allez hop tous ca c'est dans la suite !

Si c'est pas la premiere fois que vous venez sur le site, je vous conseille de vider votre cache si le slider ou la table des matieres ne fonctionnent pas correctement.

Le HTML

Le code HTML de notre table des matières . Bien entendu il ne faut pas oublier d'inclure le fichier Mootools 1.0 que je vous laisse le soin de telecharger. Si vous captez pas de quoi je parle , rendez vous sur les anciens tutos sur Mootools.

HTML:
  1. <p id="table_matiere">&nbsp;</p>
  2.  
  3. <h2>Table des matieres</h2>
  4. <p id="loading_table_matiere">Chut, ca charge ...</p>
  5. <img src="http://localhost/fardeen.biz/backup_13_fev_07_blog/wp-admin/%3C?php%20bloginfo%28%27template_directory%27%29;%20?%3E/images/loading.gif" />
  6. <ul id="liste_table_matiere">           <!-- la liste va ici se remplir toute seule de facon magique ) --></ul>

Le javascript

Voila le code qui m'a bien fait galérer je dois dire. Merci IE ) Normalement c'est suffisament bien documenté mais si tu ne ne comprends pas et bien tant pis pour toi, n'hésite à lacher ton com.

A la fin du chargement

JavaScript:
  1. ///////////////////////////////////////////////////////////////////////////////
  2. //a la fin du chargement de la page
  3. //Quand la page est chargee completement (sans les images, avec les images c'est onload)
  4. //NB : Nouvelle syntaxe window.addEvent, le window.onLoad sera bientot deprecie, vaut mieux utiliser cette commande
  5. ////////////////////////////////////////////////////////////////////////////////
  6. window.addEvent('domready', function(){
  7.  
  8. //pr les infobulles
  9. init_slider();
  10.  
  11. //pr les infobulles
  12. enableTooltips("content");
  13. enableTooltips("sidebar");
  14.  
  15. //pr les lien externe
  16. init_lien_externe();
  17.  
  18. //creation table des matieres
  19. creation_table_matiere();
  20.  
  21. });

Creation de la table des matieres

JavaScript:
  1. /////////////////////////////////
  2. //creation_table_matiere()
  3. //Generation tables des matieres
  4. //////////////////////////////////
  5. function creation_table_matiere() {
  6. //on active le scrolling avec transition
  7. //new SmoothScroll();
  8. //bugger pr l instant , attend prochaine version Mootools
  9. /*
  10. window.addEvent("domready", function() {
  11. new SmoothScroll({duration: 1500, transition: Fx.Transitions.sineInOut});
  12. });
  13. */
  14.  
  15. //permet de deplacer le div
  16. $('table_matiere').makeDraggable({
  17. handle: $("h2")  //on le deplace en cliquant sur le titre
  18. });
  19.  
  20. //on cache la liste
  21. var mySlider = new Fx.Slide('liste_table_matiere', {duration: 500});
  22. mySlider.hide();
  23.  
  24. var num_titre = 0;
  25. //on recup les titres (H3 du div #content dans mon cas)
  26. var titres =  $$('#content h3');
  27.  
  28. var contenu_titre;
  29. //on parcourt les titres trouves sur la page
  30. titres.each(function(titre){
  31.  
  32. //alert(titre.innerHTML);
  33. //titre.setProperty('name', 'titre_'+num_titre); //on affecte un name a chaque titre pour les liens crees ensuite
  34. contenu_titre = titre.innerHTML;
  35.  
  36. //on cree une balise avant chaque titre afin de pouvoir l'atteindre ensuite
  37. titre.innerHTML = "<a title="titre_" name="titre_" id="titre_"></a>" + contenu_titre;
  38.  
  39. //on ajoute au div liste table matiere les differents element
  40. //je voulais mettre un scroll avec effet de transition mais IE6 il aime pas alors on se contente d'un simple lien #titre
  41. //parcque la IE commence a me peter les youks et j'ai plus envie de debugger
  42. $("liste_table_matiere").innerHTML = $("liste_table_matiere").innerHTML + "
  43.     <li><a href="http://localhost/fardeen.biz/backup_13_fev_07_blog/wp-admin/#titre_">"+contenu_titre+"</a></li>
  44. " ;
  45. //version qui marche que sous Firefox qui integre le scroll avec Transition
  46. //le new Fx.scroll qui permet d'avoir un effet de scroll avec transition
  47. //desactiver la ligne suivante pour avoir plus la classe internationale D
  48. //$("liste_table_matiere").innerHTML = $("liste_table_matiere").innerHTML + "
  49.     <li><a href="http://localhost/fardeen.biz/backup_13_fev_07_blog/wp-admin/#" onclick="\">"+contenu_titre+"</a></li>
  50. " ;
  51.  
  52. num_titre++; //ca sert a rien mais bon on sais jamais ;)
  53. });
  54.  
  55. //quand c'est fini :
  56. //on enleve le loading
  57. $('loading_table_matiere').remove() //bye bye
  58. //on affiche la table des matieres
  59. mySlider.slideIn();
  60.  
  61. //on repositionne le div toute les 1 seconde
  62. setInterval(repositionner,1000);
  63.  
  64. }

Repositionnement automatique

JavaScript:
  1. /////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. //Repositionner();
  3. //Fonction qui repositionne le div table des matieres a intervalle regulier si necessaire.
  4. //J'utilise cette fonction parcque Internet Explorer il pue du q et qu'il capte pas le position : fixed .
  5. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  6. function repositionner() {
  7. //on declare l'effet qui fait que notre table des matiere peut bouger. On joue sur sa propriete top puisqu'on la definit en position absolute.
  8. var effetTop = new Fx.Style('table_matiere', 'top', {duration : 700,transition: Fx.Transitions.sineOut}) ;
  9. //retourne la position actuelle
  10. var position_actuelle = $('table_matiere').getStyle('top');
  11. //on positionne la table des matieres, de sa position actuelle jusqu'a l'endroit actuel de scroll
  12. //NB : document.documentElement.scrollTop est un variable javascript de base, c'est pas du Mootools
  13. //NB2 : C'est start(valeur depart, valeur arrive) et non plus custom() comme dans la version 0.83 de Mootools
  14. effetTop.start(position_actuelle,document.documentElement.scrollTop);
  15.  
  16. }

Et voila !

Habillage CSS

Et le petit code CSS (à adapter pour vos besoins bien entendu)

CSS:
  1. /*pour table matiere*/
  2. #table_matiere {
  3. position:absolute;
  4. left: 10px;
  5. top: 10px;
  6. width:250px;
  7. /*display : none;*/
  8. }
  9.  
  10. #table_matiere h2{
  11. cursor : move ;
  12. }
  13.  
  14. #loading_table_matiere {
  15. text-align : center;
  16. padding : 20px;
  17. }
  18.  
  19. /*represente le ul de table matiere*/
  20. #liste_table_matiere {
  21. padding : 0;
  22. margin : 0;
  23. list-style-type:none;
  24. padding-bottom:1em;
  25. padding-top:1em;
  26. }
  27.  
  28. #liste_table_matiere li {
  29. margin-left : 0;
  30. background : url(images/arrow_right.gif) no-repeat top left;
  31. padding-left : 2em;
  32. margin-bottom:0.5em;
  33. }

Améliorations

Il y a plein d'améliorations à apporter, c'est juste un premier jet .

  • Notamment la possibilité d'avoir l'arborescence complète et indenté (pas uniquement les H3).
  • Améliorer l'accessibilité
  • En faire un plugin Wordpres
  • Verifier la compatibilité partout
  • Remettre le SmoothScroll
  • Acheter du pain

J'essaierai de faire ca quand j'aurais le temps. Le temps, quel merde, on en a jamais...

Avant de vous quittez, je pense que vous avez remarqué le petit slider qui vous permet dorénavant de changer la taille de la page à la volée. (parcequ' il me soulait à la longue ce design étriqué) Donc vous aurez droit très prochainement à un prochain tutoriel sur cela ;)

J'ai également changé un peu les CSS pour améliorer votre confort de lecture tellement je vous aime. Si y a des bugs, lache ton com pour me l'indiquer.

Bisous les amis )

PS : Des nouveaux scripts Mootools : Inline Edit et E2 Photo Gallery

Edit : Le script est maintenant fonctionnel avec IE7 . Pour installer IE7 en version standalone (sans perdre IE6), utilisez cet installeur (400Ko). Simple et pratique ;)

Billets en relation


8 réponses à “Tutoriel Mootools 1.0 : Generation table des matieres”

Chut : ça ne charge pas avec IE7
Cordialement,
Philippe

Philippe le 1 mars 2007 7:44 |

Il me fait chiieerrrrrr cet IE . Je check pour IE7 des que je peux.

Merci pr le feedback en tt cas )

Fardeen le 1 mars 2007 15:48 |

Faudra que je teste, merci de partager )

Thanh le 2 mars 2007 11:21 |

salut sympa pour les souces.
pour info j'ai vu récemment un menu dans le meme genre sur ce site.
http://fullahead.org/
je ne sais pas du tout si ils utilisent mootools ou pas par contre.

karl le 6 mars 2007 16:34 |

Je connaissais pas ce site, cool leur integration )

non c'est pas du mootools .

Fardeen le 6 mars 2007 21:43 |

Bonjour.

Pas facile à réaliser, je pense qu'un zip aurait été plus approprié, merci

Bob le 30 mars 2007 9:41 |

Merci pour le tuto )
Je trouve ca clairement bien mieux explique que la doc officielle, que je trouve un peu obscure :/
Encore merci )

KqMi le 29 juillet 2007 2:24 |

Je viens d'intégrer cette petite boite dans une page et c'est excellent ! Merci pour ce tuto clair et facile à lire !

manu le 15 septembre 2007 14:29 |

Laisser un commentaire