Plain JavaScript tooltip

前端 未结 5 2008
渐次进展
渐次进展 2020-12-08 01:16

I am trying to make a tooltip in plain JavaScript which is shown on hover. Like the one in Stack Overflow on hover over the profile name a div is s

相关标签:
5条回答
  • 2020-12-08 01:30

    Solution with no JavaScript

    This uses CSS pseudo hover to set the display of the hidden element. The display none needs to be in the style and not on the element so it can be overwritten in the hover.

    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;
    }
    

    Example:

    jsFiddle

    Follow-Up:

    If you need to support really old browsers, you would need to add a class to the outside element when the mouse enters the div. And remove that class when mouse leaves.


    EDIT

    Your code did not work because what is tp? Is a collection of elements and you are treating it as one. What you would need to do is pass in the reference to the element

    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 */
    }
    
    0 讨论(0)
  • 2020-12-08 01:33

    Even for $(document).ready, it’s hard to accomplish in pure JS—see here: $(document).ready equivalent without jQuery

    So I’m using a simple version:

    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/

    0 讨论(0)
  • 2020-12-08 01:34

    document.addEventListener("mousemove",function awesome(e){
    if(e.target.id != ""){
    e.target.title = "#"+e.target.id;
    }
    }); 
    <div id="dkf">random stuff</div>
    <div id="dkls">some more random stuff</div>

    and you can do it with lots of other stuff, like className, tagName,etc...

    0 讨论(0)
  • 2020-12-08 01:43

    Fix for the original code

    I was looking for something like this, and i came across this page. It helpd me, but i had to fix your code, for it to work. I think that this is what you tried. You have to refference your objects by their "ID". Here is what I've done, and it works:

    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/

    0 讨论(0)
  • 2020-12-08 01:48

    For non-customized tooltip, you can just add the message you want to display in tooltip in the title attribute of the main div. Just like this:

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

    Then there is no need to add the onmouseover and onmouseout event handlers.

    0 讨论(0)
提交回复
热议问题