2013-07-27 40 views
2

我正在使用J矢量地圖(http://jvectormap.com/documentation/javascript-api/)創建美國地圖。JVectorMap - 使用按鈕選擇區域

我想要做的是爲每個狀態提供一個按鈕,您可以點擊並在地圖中選擇相應的區域(或者如果已經選擇了未選中的區域)。我正在嘗試爲此使用map.setSelectedRegion,但我無法獲取任何代碼。目前嘗試map.setSelectedRegion(「US-CA」)無濟於事。

關於該怎麼做的任何想法?

謝謝!

回答

3

一旦你設置手柄

var mapObject = $('#your_map_div_id').vectorMap('get', 'mapObject'); 

只需使用內置的功能setSelectedRegions(介意 「S」):

mapObject.setSelectedRegions(your_region_code); //to set 
mapObject.setSelectedRegions({your_region_code:false}); //to unset 

如果仍然無法正常工作,發佈您的代碼,也許這是別的。

4

似乎有很多鏈接與jvectormap鏈接的請求。

我已經把這裏的jsfiddle:http://jsfiddle.net/3xZ28/117/

HTML

<ul id="countries"> 
    <li><a href="">Romania</a></li> 
    <li><a href="">Australia</a></li> 
</ul> 
<div id="world-map" style="width: 600px; height: 400px"></div> 

JS

var wrld = { 
    map: 'world_mill_en', 
    regionStyle: { 
    hover: { 
     "fill": 'red' 
    } 
    } 
}; 

function findRegion(robj, rname) { 
    var code = ''; 
    $.each(robj, function (key) { 
     if (unescape(encodeURIComponent(robj[key].config.name)) === unescape(encodeURIComponent(rname))) { 
      code = key; 
     }; 
    }); 
    return code; 
}; 

$(document).ready(function() { 
    $('#world-map').vectorMap(wrld); 
    var mapObj = $('#world-map').vectorMap('get', 'mapObject'); 

    $('#countries').on('mouseover mouseout', 'a:first-child', function (event) { 
     // event.preventDefault(); 
     var elem = event.target, 
      evtype = event.type, 
      cntrycode = findRegion(mapObj.regions, $(elem).text()); 

     if (evtype === 'mouseover') { 
      mapObj.regions[cntrycode].element.setHovered(true); 
     } else { 
      mapObj.regions[cntrycode].element.setHovered(false); 
     };  
    }); 
}); 
0

此代碼已經過時,下面是更新的代碼版本,根據最新jvectormap API。這裏是演示片段:

<!DOCTYPE html> 
<html> 
<head> 
    <title>jVectorMap demo</title> 
    <link rel="stylesheet" href="jqvmap.min.css" type="text/css" media="screen"/> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> 
    <script src="jquery.vmap.min.js"></script> 
    <script src="jquery.vmap.world.js"></script> 

    <script> 
     jQuery(document).ready(function() { 
      $('#vmap').vectorMap({ 
       map: 'world_en', 
       backgroundColor: '#2f95c9', 
       color: '#ffffff', 
       hoverOpacity: 0.7, 
       selectedColor: '#666666', 
       enableZoom: true, 
       showTooltip: true, 
       scaleColors: ['#C8EEFF', '#006491'], 
       normalizeFunction: 'polynomial', 
       regionsSelectableOne: false, 
       regionsSelectable: false, 
       series: { 
       regions: [{ 
        scale: ['#C8EEFF', '#0071A4'], 
        normalizeFunction: 'polynomial' 
       }] 
       } 
      }); 

      var mapObj = $('#vmap').data('mapObject'); 

      $('#countries').on('mouseover mouseout', 'a:first-child', function (event) { 
       // event.preventDefault(); 
       var elem = event.target, 
        evtype = event.type; 


       if (evtype === 'mouseover') { 
        mapObj.select($(elem).attr('id')); 
       } else { 
        mapObj.deselect($(elem).attr('id')); 
       }; 
      }); 
     }); 
    </script> 

</head> 
<body> 
<ul id="countries"> 
    <li><a id="RO" href="">Romania</a></li> 
    <li><a id="AU" href="">Australia</a></li> 
</ul> 
    <div id="vmap" style="width: 100vw; height: 100vh;"></div> 
</body> 
</html>