Plain Javascript Tooltip

Bonjour, j'essaie de faire des informations sur les outils dans les JS claires qui montrent le survol. Comme celui du stackoverflow sur le nom du profil, un div est affiché.

J'ai essayé d'utiliser onmouseover , onmouseout et ajouté setTimeout pour donner à l'utilisateur quelques secondes pour déplacer la souris sur le contenu de l'info-bulle. Mais cela ne fonctionnait pas comme je le pensais.

J'aime vraiment les js plus que d'utiliser n'importe quelle bibliothèque. Est-ce que quelqu'un peut m'aider?

C'est ce que j'ai fait dans PURE JS

HTML

 <div class = "name" onmouseover="show()" onmouseout="hide()"> NAME <div class = "tooltip"> PROFILE DETAILS </div> </div> <div class = "name" onmouseover="show()" onmouseout="hide()"> NAME 2 <div class = "tooltip" > PROFILE DETAILS 2 </div> </div> <div class = "name" onmouseover="show()" onmouseout="hide()"> NAME 3 <div class = "tooltip" > PROFILE DETAILS 3 </div> </div> 

CSS

 .name{ float:left; margin:100px; border:1px solid black; } .tooltip{ position:absolute; margin:5px; width:200px; height:100px; border:1px solid black; display:none; } 

JS

 var name = document.getElementsByclassName("name"); var tp = document.getElementsByclassName("tooltip"); function show(){ tp.style.display="block"; } function hide(){ tp.style.display=""; } 

Solution sans JavaScript

Cela utilise CSS pseudo flottant pour définir l'affichage de l'élément caché. L'affichage ne doit pas être dans le style et non sur l'élément afin qu'il puisse être écrasé dans le vol stationnaire.

HTML:

 <div class="couponcode">First Link <span class="coupontooltip">Content 1</span> <!-- UPDATED --> </div> <div class="couponcode">Second Link <span class="coupontooltip"> Content 2</span> <!-- UPDATED --> </div> 

CSS:

 .couponcode:hover .coupontooltip { /* NEW */ display: block; } .coupontooltip { display: none; /* NEW */ background: #C8C8C8; margin-left: 28px; padding: 10px; position: absolute; z-index: 1000; width:200px; height:100px; } .couponcode { margin:100px; } 

Exemple:

JsFiddle

Suivre:

Si vous devez supporter des navigateurs vraiment anciens, vous devriez ajouter une classe à l'élément externe lorsque la souris entre dans la division. Et retirez cette classe lorsque la souris part.


MODIFIER

Votre code n'a pas fonctionné, car qu'est-ce que c'est tp? Est-ce une collection d'éléments et vous le considérez comme un seul. Ce que vous devriez faire, c'est passer la référence à l'élément

HTML:

 <div class = "name" onmouseover="show(this)" onmouseout="hide(this)"> <!-- added "this" 2 times --> 

** JavaScript:

 //var name = document.getElementsByclassName("name"); /* not needed */ // var tp = document.getElementsByclassName("tooltip"); /* not needed */ function show (elem) { /* added argument */ elem.style.display="block"; /* changed variable to argument */ } function hide (elem) { /* added argument */ elem.style.display=""; /* changed variable to argument */ } 

Correction du code original

Je cherchais quelque chose comme ça, et je suis tombé sur cette page. Cela m'a aidé, mais j'ai dû corriger votre code, pour qu'il fonctionne. Je pense que c'est ce que vous avez essayé. Vous devez référencer vos objets par leur «ID». Voici ce que j'ai fait, et cela fonctionne:

HTML

 <div class = "name" onmouseover="show(tooltip1)" onmouseout="hide(tooltip1)"> NAME <div class = "tooltip" id= "tooltip1"> PROFILE DETAILS </div> </div> <div class = "name" onmouseover="show(tooltip2)" onmouseout="hide(tooltip2)"> NAME 2 <div class = "tooltip" id= "tooltip2"> PROFILE DETAILS 2 </div> </div> <div class = "name" onmouseover="show(tooltip3)" onmouseout="hide(tooltip3)"> NAME 3 <div class = "tooltip" id= "tooltip3"> PROFILE DETAILS 3 </div> </div> 

CSS

 .name{ float:left; margin:100px; border:1px solid black; } .tooltip{ position:absolute; margin:5px; width:200px; height:50px; border:1px solid black; display:none; } 

JS

 function show (elem) { elem.style.display="block"; } function hide (elem) { elem.style.display=""; } 

http://jsfiddle.net/5qbP3/28/

Même pour $ (document) .ready, il est difficile à accomplir dans JS pur – voir ici: $ (document). Jj équivalent sans jQuery

J'utilise donc une version simple:

 window.addEventListener("load", function () { var couponcodes = document.getElementsByClassName("couponcode"); for (var i = 0; i < couponcodes.length; i++) { couponcodes[i].addEventListener("mouseover", function () { var coupontooltip = this.getElementsByClassName("coupontooltip")[0]; coupontooltip.removeAttribute("style"); }); couponcodes[i].addEventListener("mouseout", function () { var coupontooltip = this.getElementsByClassName("coupontooltip")[0]; coupontooltip.style.display = "none"; }); } }); 

http://jsfiddle.net/mynetx/5qbP3/

Pour une info-bulle non personnalisée, vous pouvez simplement ajouter le message que vous souhaitez afficher dans l'info-bulle dans l'attribut titre de la div principale. Juste comme ça:

 <div class = "name" onmouseover="show()" onmouseout="hide()" title="PROFILE DETAILS"> 

Ensuite, il n'est pas nécessaire d'ajouter les gestionnaires d'événement onmouseover et onmouseout .

Si vous êtes intéressé par une option simple et robuste, ajoutez ces quelques lignes de JavaScript à la fin de votre page:

 (function(){ var stylesheet1 = document.createElement('style'); stylesheet1.innerHTML = 'mb-tooltip {display: none;position: fixed;}[data-mb-tooltip]:hover + mb-tooltip {display: block;}'; document.head.appendChild(stylesheet1); var stylesheet2 = document.createElement('style'); document.head.appendChild(stylesheet2); var tooltipList = document.querySelectorAll('[data-mb-tooltip]'); for(var i = 0; i < tooltipList.length; i++){ var tooltipContainer = document.createElement('mb-tooltip'); tooltipContainer.innerHTML = tooltipList[i].getAttribute('data-mb-tooltip'); tooltipList[i].parentNode.insertBefore(tooltipContainer, tooltipList[i].nextSibling); } window.addEventListener('mousemove', function(e){ stylesheet2.innerHTML = 'mb-tooltip { top: ' + (e.clientY + 18) +'px; left: ' + e.clientX +'px}' }); })(); 

Ensuite, ajoutez un data-mb-tooltip="your text" à l'élément que vous souhaitez afficher la info-bulle lorsque vous le déplacez.

Ensuite, vous pouvez personnaliser la info-bulle, mais vous souhaitez utiliser la mb-tooltip dans votre CSS (par exemple, mb-tooltip {border:solid gray 1px;} )

PS Vous pouvez également mettre le HTML dans le mb-tooltip attr.