我知道这是一个有点过时的问题,但是对于像我这样的其他人来说,这是一个围绕 iOS 问题的 hack,他们在寻找一些 hack 时遇到了这个问题。
正如您已经注意到的,iPad/iPhone 正在模拟第一次“点击”的悬停..并点击第二次“点击”。
因此,为了解决这种不良行为,我们将执行以下操作(小提琴上的示例)
var lastCode = "";
var iOS = /(iPad|iPhone|iPod)/g.test( navigator.userAgent );
$('#world-map').vectorMap({
map: 'world_mill_en',
backgroundColor: 'green',
normalizeFunction: 'polynomial',
regionsSelectable: true,
regionsSelectableOne: true,
zoomOnScroll: true,
zoomButtons: true,
regionStyle: {
initial: {
fill: "white",
"fill-opacity": 1,
stroke: "none",
"stroke-width": 0,
"stroke-opacity": 1
},
hover: {
fill: "white",
"fill-opacity": 1
},
selected: {
fill: "#EC6602",
"fill-opacity": 1
},
selectedHover: {
fill: "#EC6602",
"fill-opacity": 1
}
},
onRegionClick: function(e, country){
if (lastCode && lastCode == country) {
e.preventDefault();
return;
}
var map = $("#world-map").vectorMap("get", "mapObject");
$("#world-map").vectorMap("set", "focus", country);
map.setScale(2);
if(country=="US" || country=="RU") {
map.setScale(1);
}
lastCode = country;
},
onRegionLabelShow: function (e, el, country) {
if (iOS) {
e.preventDefault();
var map = $("#world-map").vectorMap("get", "mapObject");
if (lastCode) {
map.regions[lastCode].element.setSelected(false);
}
map.regions[country].element.setSelected(true);
$("#world-map").vectorMap("set", "focus", country);
map.setScale(2);
if(country=="US" || country=="RU") {
map.setScale(1);
}
lastCode = country;
}
},
markers: [{
latLng: [37.7833, -122.4167],
name: 'San Francisco'
}]
});
简而言之,我们正在使用自定义行为覆盖 onRegionLabelShow 功能(仅适用于 iOS 设备)。基本上,我们阻止了工具提示的显示,而是选择了悬停(点击)的ccountry,将其聚焦并将其代码存储在全局变量中。
在第二次点击时,我们通过将当前代码与最后一个值进行比较来检测国家是否发生了变化,在这种情况下,取消选择先前选择的国家并选择新的国家。
根据您的需要调整分辨率应该相当容易。