启用突出显示单击以查看jQuery Map突出显示

时间:2011-01-18 22:24:06

标签: jquery plugins highlight

我正在使用jQuery Highlight插件制作图表 (http://davidlynch.org/js/maphilight/docs/)我目前有可点击的图表,并根据您点击的区域加载内容(如简单的标签)。

但是,我需要在点击时突出显示地图并禁用任何其他突出显示的区域。现在,我可以在点击时突出显示区域,但不禁用任何现有的高光。我还想让图表在悬停时切换内容,但现在不像点击时的重点那样重要。

我现在有一个演示版本: http://jsfiddle.net/keith/PVpgK/

或全屏结果: http://jsfiddle.net/keith/PVpgK/embedded/result/

提前感谢您提供任何帮助

3 个答案:

答案 0 :(得分:1)

您需要遍历其他区域并关闭alwayson以使最后一次点击在新点击时不亮。尝试这样的事情:

  //map clicks
   $(".tabs area").click(function(){

       //AREAS LOOP:
       $(".tabs area").each(function(){
           var d = $(this).data('maphilight') || {};
           if(d.alwaysOn == true){
             d.alwaysOn = false;  
           }
         });

//DISPLAY CURRENT LI FUNCTION:
$('.tabs area').mouseover(function(){

     var thisTarget = $(this).attr("href");

    if(thisTarget){      
        $('#test').innerHTML = thisTarget;  
    }
     $(this).parents(".tabs").find('area.current').removeClass('current');

     $(this).addClass('current');

     $(this).parents(".tabs").nextAll(".tab-content").children(":visible").fadeOut(1, function() {
         $(thisTarget).fadeIn("fast");
     });

});
   //This block is what creates highlighting by trigger the "alwaysOn",
   var data = $(this).data('maphilight') || {};
   data.alwaysOn = true;  //NOTICE I MADE THIS ALWAYS TRUE
   $(this).data('maphilight', data).trigger('alwaysOn.maphilight');
   //there is also "neverOn" in the docs, but not sure how to get it to work


   if ($(this).hasClass("current") == false)
   {
       var thisTarget = $(this).attr("href");

       $(this).parents(".tabs").find('area.current').removeClass('current');

       $(this).addClass('current');

       $(this).parents(".tabs").nextAll(".tab-content").children(":visible").fadeOut(1, function() {
           $(thisTarget).fadeIn("fast");
       });

   }
   return false;
  });

答案 1 :(得分:1)

HTML代码:

<img src="img.jpg" alt="img" usemap="#map">    

<map name="map">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
 <area shape="poly" coords="[yourCoords]" alt="img" href="javascript:void(0);" class="punto">
</map>

JS代码

$(function(){
   $('.map').maphilight({
       fillColor: 'ff0000',
       fillOpacity:0.4,
       stroke:false,
       neverOn:true
   });

   $('.punto').click(function(){
       var data = $(this).data('maphilight') || {};
       data.alwaysOn=true;
       $(this).data('maphilight', data).trigger('alwaysOn.maphilight');;
   });
})

答案 2 :(得分:0)

更有效的方法是在点击时添加一个类,并在单击下一个位置时将其删除。添加完课程后,您可以进行操作。这样,如果你有数百或数千个区域(就像我的地图一样),那么当你试图遍历每个区域时,页面就不会锁定。

以下链接将带您找到解释此问题的答案。 https://stackoverflow.com/a/8397900/1101054