INFOBULLES

illus

script : bubulle
langage : javascript
catégorie : module
usage : Des bulles d'aide personnalisées par css.
tags : ergonomie

Concept

Ce genre d'infobulles {survolez-moi} c'est bien, mais c'est parfois un peu léger. Il y a des fois où on voudrait bien les rendre plus jolies, et des fois aussi où on voudrait pouvoir mettre plus que du texte dedans ! bubulle est là pour ça, et fonctionne en toute simplicité.

bubulle offre les caractéristiques suivantes :

  • design libre des bulles, par css - démo
  • intégration d'éléments html à volonté - démo
  • fonctionne sur tout type d'élément html -
  • se positionne de façon à ne pas déborder de la fenêtre - démo
  • nombreuses options, dont :
    • chargement du contenu de la bulle par ajax - démo
    • délai avant apparition - démo (1 seconde)
    • apparition en fondu - démo
    • bulle persistante (possibilité de cliquer dans la bulle) - démo
  • intégration facile, en javascript non intrusif
  • très léger (3.6 ko)
 

Collez de plus près au graphisme de votre site,

Et profitez allègrement des css3

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.

Cette bulle ne se refermera pas tant que vous ne cliquerez pas ici, ou qu'une autre ne sera pas ouverte.
Intégrez tout le html que vous voulez

images :
vaudou
listes :
  • d'abord
  • ensuite
  • enfin
éléments divers :
La preuve !
(ici : <input type="button" />)
Redimentionnez et faites défiler la page pour faire l'essai.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.
Chargement en cours...
Ça ne devrait pas être long.
Comme vous avez pu le contater, il faut pointer le lien durant une seconde pour que cette bulle apparaisse.
(Les autres bulles de démonstration sont régélées à 200 ms.)
Classe !
Plusieurs remarques à propos de cet exemple :

  • La bulle ne disparaît pas tout de suite quand vous déplacez votre souris.
  • La bulle ne disparaît pas tant que vous la survolez avec la souris.

  • Cela permet par exemple de cliquer sur des liens.
Dans cet exemple la bulle bouge avec la souris.

Code

Commençons par l'aspect javascript :

Il faut déjà charger le script, en insérant le code suivant entre les balises <head> et </head> de la page :

<script src="bubulle.mins.js" type="text/javascript"></script>

Puis on déclare les bulles à l'intérieur d'une nouvelle balise <script> placée en fin de page :

bubulle.apply(document.getElementById('mon_element'), 'Sali-salut Homer');
Astuce

On peut aussi préparer le contenu des bulles dans des éléments masqués.

Pour se simplifier la vie, on peut préparer le contenu de la bulle dans un élément masqué, et reproduire ce contenu dans la bulle :

<div id="source" style="display:none;"><!-- remarquez le display:none; -->
  <ul>
	<li>element 1</li>
	<li>element 2</li>
	<li>element 3</li>
  </ul>
 </div>
var cible = document.getElementById('mon_element');
var source = document.getElementById('source').innerHTML;
bubulle.apply(cible, source);

Côté CSS, tout est permis.

Sachez que la bulle reçoit un attribut id="bubulle". Vous pouvez donc la styliser via son id :

#bubulle {
	background-color: #fafaff;
	border: 1px solid #aaf;
}

Mais si vous voulez afficher dans une même page plusieurs bulles avec des styles différents, il sera plus pratique d'utiliser des styles de classes :

.bulle1 {
	background-color: #fafaff;
	border: 1px solid #aaf;
}
.bulle2 {
	color: #fff;
	background-color: #000;
	border: 1px solid #f00;
}

Vous ajouterez alors une option à la méthode bubulle.apply() :
(plus d'explications à propos des options juste un peu plus bas.)

bubulle.hop(contenu, {classe:'bulle1'});

Options

bubulle.apply() accepte plusieurs options, que l'on indique en troisième paramètre de la méthode. Ces options doivent être déclarées dans un tableau associatif, sous la forme suivante :

var options = {
	option1 : valeur1,
	option2 : valeur2,
	optionN : valeurN
};
 
bubulle.apply(declencheur, contenu, options);

Voici la liste des options disponibles :

options type description par défaut
classe String
classe css à appliquer à la bulle null
survolBulle Boolean indique si la bulle doit rester ouverte quand la souris la survolle. 0
delai Integer permet de n'afficher la bulle que si la souris reste un certain temps au dessus de l'élément déclencheur.
Cette durée est exprimée en millisecondes.
200
persistance Integer Normalement, la bulle disparaît immédiatement lorsque la souris ne survole plus l'élément qui l'a ouverte.
L'option persistance permet de faire en sorte que la bulle ne disparaisse qu'après un certain délai, exprimé en millisecondes.
Avec persistance:-1 , la bulle ne disparaîtra pas tant que la méthode bubulle.pop() n'aura pas été appelée par vos soins (grâce à un bouton de fermeture, par exemple).
0
fixeApres Integer
avant ce délai (exprimé en milliseconde), la bulle bouge avec la souris.
  • fixeApres:-1 fait que la bulle bougera tout le temps avec la souris
  • nota bene : Le délai indiqué par fixeApres est diminué du montant de l'option delai.
  • nota bene 2 : avec survolBulle:true + delai:0, je préconise de ne pas mettre fixeApres:0, car il faut laisser un peu de temps à l'utilisateur pour stabiliser sa main quand il déplace la souris (200 ms peuvent faire l'affaire)
200
contenuAjax String url du fichier à interroger, en cas de chargement du contenu de la bulle par ajax.
Cette option requiert bubulle.extras.js pour fonctionner (fourni dans le zip).
null
fonduOpt function
liste d'options pour l'apparition en fondu. (Voir fade.js pour le détail de ces options)
Cette option requier bubulle.extras.js pour fonctionner (fourni dans le zip).
null

Téléchargement

Vous trouverez dans ce zip une version minifiée du script (3,6Ko), une autre commentée, ainsi qu'un fichier supplémentaire (optionnel) pour les effets de fondu et le chargement du contenu par ajax.

compatibilité :
Internet Explorer (5.5+) Firefox Safari Opera Google Chrome
(autres navigateurs non testés)

Notez que ce module embarque plusieurs fragments de code présentés sur ce site : getPos, qui permet de connaître la position d'un élément html dans la page, mousePos, qui nous renseigne sur la position de la souris, scrolled, qui mesure le défilement de la page, winDim, qui retourne les mesures de la fenêtre, ainsi que setOpacity et fade pour l'effet d'apparition en fondu, et encore AjReq, pour les requêtes ajax.

Commentaires

  • Publier un nouveau commentaire
  • gravatar
    c'est super ce tuto !
  • gravatar
    bonjour, c'est un super tuto :)
    j'ai une question, comment fait-on pour mettre un timer ?
    C'est à dire : J'aimerais qu'à l'apparition de ma bulle, les personnes puissent aller cliquer sur un lien contenu dans cette bulle.
    Je n'y arrive absolument pas, j'ai beau fouiller je rame.

    Merci :)
  • gravatar
    Salut.
    Pas de timer prévu dans ce script. Mais je prends note de cette idée pour de prochaines améliorations.

    Cela dit, tu peux faire des infobulles persistantes avec un autre script présenté sur ce site : jette donc un oeil aux "Boîtes de dialogue" :

    edit : Dans sa nouvelle version, bubulle intègre une fonction de persistance. Voir au paragraphe "options" de cette page.
  • gravatar
    merci, je vais voir ça tout de suite :)
    mais bon je sais pas si ça va etre bon dans la mesure ou j'ai plusieurs bulles et qu'elles doivent quand meme se fermer :)

    Enfin bon je vais regarder ! merki
  • gravatar
    Si tu as besoin de sur-mesure, note que le développement c'est aussi mon métier     ;-)
    webmaster@webbricks.org
  • gravatar
    oui mais bon, je suis en stage, faut que je débrouille un minimum :)
  • gravatar
    Mise à jour

    Salut. Je mets en ligne une nouvelle version script, qui intègre de nouvelles options bien pratiques :
    - infobulles persistantes
    - chargement du contenu par ajax
    - affichage et/ou disparition différés
  • gravatar
    Y'a des choses absolument formidables là dedans ! (Pour ne pas dire tout :p)

    Et en plus, c'est un vrai plaisir de se promener sur ton site, Abrab !
  • gravatar
    Tout d'abord merci pour cet excellent site, Ce qu'on y trouve est impeccable, fonctionnel et surtout assez simple pour être a la portée de tous

    Besoin d'une petite astuce
    Je souhaite utiliser ce systeme de bubulles pour afficher des infos sur une galerie d'image, donc j'ai besoin lorsqu'a travers la bubule je vais chercher le contenu en ajax, de transmettre un ID de l'image que j'utilise également, j'ai cet id unique définit pour chaque photo mais je ne sais pas comment le transmettre à travers votre script

    Est ce "facilement" faisable et si oui pourriez vous m'aiguiller un peu ? ;)

    Merci d'avance
  • gravatar
    Salut Juju95,
    Tu peux transmettre ton id dans l'url du fichier interrogé par Ajax : contenuAjax: "monfichier.php?id=XXX"
    Et dans ton fichier php (en admettant que tu travailles en php), tu récupéreras cette donnée via $_GET['id']
  • gravatar
    A ce niveau là je vois encore comment le faire
    par contre vu que le lien entre bubule et mes images se fait a la fin du fichier, n'y a t'il pas possibilité de mettre cet appel directement dans le lien de chaque photo/lien, car si j'ai 50 photos sur ma page, avec votre solution je devrais mettre 50 fois l'appel bubulle.apply(document.getElementById('mon_element')...
    a la fin de ma page

    A moins que j'ai mal comprit quelque chose dans le processus ;)

    dsl si je ne suis pas très claire

    Dans les autres exemples que j'ai pu trouver sur le net, ils proposent cette fonctionnalité a partir d'un attribut "rel" directement dans chaque lien, je sais pas si l'équivalent serait faisable avec bubulle
  • gravatar
    Effectivement bubulle() est prévu pour traiter un élément à la fois. Par contre, avec seek(), que je présente également sur ce site, tu peux sélectionner des éléments selon leur attribut "rel", et les traiter ensuite dans une boucle.

    Si tu as besoins de plus d'explications, merci de me contacter par email, pour ne pas flooder les commentaires.
  • gravatar
    Bonjour, je vous ai envoyé un e-mail avec des questions, l'avez-vous reçu ? J'aimerais faire une bulle persistante sur mon site, j'en ai fais une mais je n'arrive pas à enlever le fait qu'il faut cliquer sur ok pour que la bulle disparaisse. je suis nul en programmation je dois avouer, pouvez-vous me contacter par e-mail ? Merci.
  • gravatar
    Bonjour,
    est ce que quelqu'un pourrait me montrer un exemple d'utilisation du script ? Je débute en javascript et j'ai du mal à comprendre comment utilisez les fonctions.
    merci
  • gravatar
    à quoi sert le bubulle.hop() ?
  • gravatar
    dsl 2ème com, c'est obligatoirement au passage de la souris? ou bien on peut faire avec onclick : gérer l'évènement qu'on veut au lieu du onmouseover qu'il y a ici par défaut d'après ce que j'ai compris
  • gravatar
    dans les astuces style="display:none;" ne fonctionne pas sous chrome, il vaut mieux utiliser visibility: hidden;
    Voila ce que j'ai put constater. En tous cas super utile ce site. Merci pour le partage.
  • gravatar
    Bonjour!
    Désolé, mais je n'ai aucune notion du JavaScript, par contre, pour avoir utiliser assez souvent, je peux quand même me débrouiller. J'ai inscrit le script dans la balise HEAD, pas de problème, j'ai inscrit le GETID au bas de ma page avant la fermeture de la balise BODY. Mais je ne sais quoi écrire à la place de ('mon_element') & à l'endroit d?où je veux que la bulle apparaisse, je fais comment ?.
    Merci de bien vouloir m'aider.
  • gravatar
    Bonjour,

    Je cherche à conserver la bulle au-dessus de tous les div et autres fieldsets, est-ce possible ?

    Merci
  • gravatar
    est-ce possible de l'utiliser avec un map area?
  • Moi, , je dis que...

    (Veuillez noter que le support technique n'est plus assuré par l'auteur du script. En cas de difficultés, les utilisateurs sont invités à s'entraider.)

    mon email (pour recevoir les réponses) :
    mon site web :
    se souvenir de moi :