7

我正在使用 JQVmap ( https://github.com/manifestinteractive/jqvmap ) 在站点上输出地图。当您悬停在每个国家/地区时,我不想做某事,而是希望将它们分组到区域中。例如,当您将鼠标悬停在其中任何一个上并进行国家分组时,我希望这三个国家都显示悬停状态,而不是加拿大、美国和墨西哥。我看过多篇关于如何为国家集着色的帖子,但是每个国家仍然有自己的悬停状态,并且不会触发其他国家的相同颜色的悬停状态。有任何想法吗?

4

1 回答 1

9

我正在做一个项目,需要这样做。这就是我的做法。

  1. 定义您想要的区域。
  2. 添加辅助方法以突出显示/取消突出显示区域内所有国家/地区的国家/地区。
  3. 将这些辅助方法添加为地图的“onRegionOver”和“onRegionOut”方法。

第1步。

这是我定义区域的方式。

var regionMap = {
        "southAmerica" :{
        "countries" : ["ar", "bo", "br", "cl", "co", "ec", "fk", "gy", "gf", "pe", "py", "sr", "uy", "ve"],
        "name" : "South America"
    },
        "northAmerica" :{
        "countries" : ["ca", "gl", "us"],
        "name" : "Northern America"
    }
}; //And so on...

我还添加了一个地图和一个用于反向查找的方法。

var countryMap = {
    "ca":"northAmerica",
    "gl":"northAmerica",
    "us":"northAmerica",
}; //And so on...
function getRegion(cc) {
    var regionCode = countryMap[cc];
    return regionMap[regionCode];
}

或者,您可以避免反向查找映射并编写一个函数:

function getCountriesInRegion(cc) {
    for (var regionKey in regions)
    {
        var countries = regionMap[regionKey].countries;
        for (var countryIndex in countries)
        {
            if (cc == countries[countryIndex])
            {
                return countries;
            }
        }
    }
}

第2步

高亮/不高亮区域的辅助方法:

function highlightRegionOfCountry (cc) {
    var countries = getRegion(cc).countries;
    for (countryIndex in countries)
    {
        $('#vmap').vectorMap('highlight',countries[countryIndex]); 
    }
    $('#vmap').vectorMap('highlight',cc);
}

function unhighlightRegionOfCountry (cc) {
    var countries = getRegion(cc).countries;
    for (countryIndex in countries)
    {
        $('#vmap').vectorMap('unhighlight',countries[countryIndex]);    
    }
    $('#vmap').vectorMap('unhighlight',cc);
}

步骤 3。

添加注册辅助方法到地图的悬停事件。

jQuery(document).ready(function() {
    jQuery('#vmap').vectorMap({
        map: 'world_en',
        backgroundColor: '#333333',
        color: '#ffffff',
        hoverOpacity: 0.2,
        selectedColor: '#666666',
        enableZoom: true,
        showTooltip: true,
        onRegionOver : function (element, code, region)
        {
            highlightRegionOfCountry(code);
        },
        onRegionOut : function (element, code, region)
        {
            unhighlightRegionOfCountry(code);
        }
    });
});

tl;博士:使用这些:

$('#vmap').vectorMap('highlight', countryCode);

$('#vmap').vectorMap('unhighlight', countryCode); 

我的项目需要的区域是联合国定义的区域。您可以在GitHub 上查看我的 JVQmap 分支。您要查看的文件是/jqvmap/maps/jquery.vmap.un_regions.js

我希望这有帮助!

于 2014-02-17T09:49:40.677 回答