Adding hover effects for links in image map (area)

前端 未结 2 1701
太阳男子
太阳男子 2021-01-03 07:50

I\'m only a beginner in html and I would like to put hover effects for my image map. I have searched for lots of solutions but I only come up with solutions using script whi

相关标签:
2条回答
  • 2021-01-03 08:12

    The following JS and CSS makes image(map)s responsive and adds a hover effect to the areas.

    var images = document.querySelectorAll('img[usemap]');
    images.forEach( function(image) {
        var mapid = image.getAttribute('usemap').substr(1);
        var imagewidth = image.getAttribute('width');
        var imageheight = image.getAttribute('height');
        var imagemap = document.querySelector('map[name="'+mapid+'"]');
        var areas = imagemap.querySelectorAll('area');
    
        image.removeAttribute('usemap');
        imagemap.remove();
    
        // create wrapper container
        var wrapper = document.createElement('div');
        wrapper.classList.add('imagemap');
        image.parentNode.insertBefore(wrapper, image);
        wrapper.appendChild(image);
    
        areas.forEach( function(area) {
            var coords = area.getAttribute('coords').split(',');
            var xcoords = [parseInt(coords[0]),parseInt(coords[2])];
            var ycoords = [parseInt(coords[1]),parseInt(coords[3])];
            xcoords = xcoords.sort(function(a, b){return a-b});
            ycoords = ycoords.sort(function(a, b){return a-b});
            wrapper.innerHTML += "<a href='"+area.getAttribute('href')+"' title='"+area.getAttribute('title')+"' class='area' style='left: "+((xcoords[0]/imagewidth)*100).toFixed(2)+"%; top: "+((ycoords[0]/imageheight)*100).toFixed(2)+"%; width: "+(((xcoords[1] - xcoords[0])/imagewidth)*100).toFixed(2)+"%; height: "+(((ycoords[1] - ycoords[0])/imageheight)*100).toFixed(2)+"%;'></a>";
        });
    });
    img {max-width: 100%; height: auto;}
    
    .imagemap {position: relative;}
    .imagemap img {display: block;}
    .imagemap .area {display: block; position: absolute; transition: box-shadow 0.15s ease-in-out;}
    .imagemap .area:hover {box-shadow: 0px 0px 1vw rgba(0,0,0,0.5);}
    <!-- Image Map Generated by http://www.image-map.net/ -->
    <img src="https://i.imgur.com/TwmCyCX.jpg" width="2000" height="2604" usemap="#image-map">
    <map name="image-map">
        <area target="" alt="Zirconia Abutment" title="Zirconia Abutment" href="/" coords="3,12,199,371" shape="rect">
        <area target="" alt="Gold Abutment" title="Gold Abutment" href="/" coords="245,12,522,371" shape="rect">
        <area target="" alt="CCM Abutment" title="CCM Abutment" href="/" coords="564,12,854,369" shape="rect">
        <area target="" alt="EZ Post Abutment" title="EZ Post Abutment" href="/" coords="1036,12,1360,369" shape="rect">
        <area target="" alt="Milling Abutment" title="Milling Abutment" href="/" coords="1390,12,1688,369" shape="rect">
        <area target="" alt="Angled Abutment" title="Angled Abutment" href="/" coords="1690,12,1996,371" shape="rect">
        <area target="" alt="Temporary Abutment [Metal]" title="Temporary Abutment [Metal]" href="/" coords="45,461,506,816" shape="rect">
        <area target="" alt="Fuse Abutment" title="Fuse Abutment" href="/" coords="1356,461,1821,816" shape="rect">
        <area target="" alt="Lab Analog" title="Lab Analog" href="/" coords="718,935,1119,1256" shape="rect">
        <area target="" alt="Transfer Impression Coping Driver" title="Transfer Impression Coping Driver" href="/" coords="8,1330,284,1731" shape="rect">
        <area target="" alt="Impression Coping [Transfer]" title="Impression Coping [Transfer]" href="/" coords="310,1330,697,1731" shape="rect">
        <area target="" alt="Impression Coping [Pick-Up]" title="Impression Coping [Pick-Up]" href="/" coords="1116,1330,1560,1733" shape="rect">
    </map>

    0 讨论(0)
  • 2021-01-03 08:27

    What you're trying to do is not very simple, you will have to combine javascript and css or jquery to give the effect you want.

    It's because the area element doesn't accept hover directly, unfortunately...

    But the good news is that it was answered before here:

    How to apply Hovering on html area tag?

    Visible Area tag?

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