Google 地图工具提示在全屏模式下不起作用
Google maps tool tip not working full screen mode
我使用以下站点示例在悬停多边形上显示工具提示。
http://philmap.000space.com/gmap-api/poly-hov.html?i=1
在普通视图中,悬停时工具提示按预期工作。但在全屏模式下工具提示不显示工作。尝试用 z-index 修复,设置工具提示 div 相对位置但不起作用。
这是我的代码。提前致谢。
var map = new google.maps.Map(document.getElementById("mapD4"), {
zoom: 14,
center: {
lat: parseFloat(6.890132), lng: parseFloat(79.87557)
},
});
var data_layer_1 = new google.maps.Data({ map: map });
data_layer_1.loadGeoJson('https://raw.githubusercontent.com/Thanushkajayasinghe/D4Ward/main/Kirula.geojson');
data_layer_1.setStyle({
strokeColor: '#8854d0',
fillColor: '#8854d0',
strokeOpacity: 1.0,
strokeWeight: 1,
fillOpacity: 0.7
});
//Tooltip data_layer_1 click
google.maps.event.addListener(data_layer_1, 'click', function (e) {
var district = e.feature.j.CMC_Dis;
var ward = e.feature.j.CMC_Ward;
loadTooltip(district, ward);
});
function loadTooltip(district, ward) {
$.ajax({
url: LoadDisMapData,
type: 'POST',
data: { district: district, ward: ward },
dataType: 'json',
success: function (data) {
tooltip.show("Ward: <span style='font-weight: bold'>" + ward + "</span><br/>\
Population: <span style='font-weight: bold'>" + data.sumPopulation.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "</span><br/>\
PCR Done: <span style='font-weight: bold'>" + data.pcrDoneCount.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "</span><br/>\
Positive: <span style='font-weight: bold'>" + data.positiveCount.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "</span><br/>\
Deaths: <span style='font-weight: bold'>" + data.deathsCount.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "</span><br/>");
}
});
}
google.maps.event.addListener(data_layer_1, 'mouseout', function (e) {
tooltip.hide();
});
var tooltip = function () {
var id = 'tt';
var top = 3;
var left = 3;
var maxw = 300;
var speed = 10;
var timer = 20;
var endalpha = 95;
var alpha = 0;
var tt, t, c, b, h;
var ie = document.all ? true : false;
return {
show: function (v, w) {
if (tt == null) {
tt = document.createElement('div');
tt.setAttribute('id', id);
t = document.createElement('div');
t.setAttribute('id', id + 'top');
c = document.createElement('div');
c.setAttribute('id', id + 'cont');
b = document.createElement('div');
b.setAttribute('id', id + 'bot');
tt.appendChild(t);
tt.appendChild(c);
tt.appendChild(b);
document.body.appendChild(tt);
tt.style.opacity = 0;
tt.style.filter = 'alpha(opacity=0)';
document.onmousemove = this.pos;
}
tt.style.display = 'block';
c.innerHTML = v;
tt.style.width = w ? w + 'px' : 'auto';
if (!w && ie) {
t.style.display = 'none';
b.style.display = 'none';
tt.style.width = tt.offsetWidth;
t.style.display = 'block';
b.style.display = 'block';
}
if (tt.offsetWidth > maxw) { tt.style.width = maxw + 'px' }
h = parseInt(tt.offsetHeight) + top;
clearInterval(tt.timer);
tt.timer = setInterval(function () { tooltip.fade(1) }, timer);
},
pos: function (e) {
var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
tt.style.top = (u - h) + 'px';
tt.style.left = (l + left) + 'px';
},
fade: function (d) {
var a = alpha;
if ((a != endalpha && d == 1) || (a != 0 && d == -1)) {
var i = speed;
if (endalpha - a < speed && d == 1) {
i = endalpha - a;
} else if (alpha < speed && d == -1) {
i = a;
}
alpha = a + (i * d);
tt.style.opacity = alpha * .01;
tt.style.filter = 'alpha(opacity=' + alpha + ')';
} else {
clearInterval(tt.timer);
if (d == -1) { tt.style.display = 'none' }
}
},
hide: function () {
clearInterval(tt.timer);
tt.timer = setInterval(function () { tooltip.fade(-1) }, timer);
}
};
}();
问题是只有目标元素内的元素全屏显示。
所以你需要替换这一行
document.body.appendChild(tt);
和
document.getElementById('map_canvas').firstChild.appendChild(tt);
我使用以下站点示例在悬停多边形上显示工具提示。
http://philmap.000space.com/gmap-api/poly-hov.html?i=1
在普通视图中,悬停时工具提示按预期工作。但在全屏模式下工具提示不显示工作。尝试用 z-index 修复,设置工具提示 div 相对位置但不起作用。
这是我的代码。提前致谢。
var map = new google.maps.Map(document.getElementById("mapD4"), {
zoom: 14,
center: {
lat: parseFloat(6.890132), lng: parseFloat(79.87557)
},
});
var data_layer_1 = new google.maps.Data({ map: map });
data_layer_1.loadGeoJson('https://raw.githubusercontent.com/Thanushkajayasinghe/D4Ward/main/Kirula.geojson');
data_layer_1.setStyle({
strokeColor: '#8854d0',
fillColor: '#8854d0',
strokeOpacity: 1.0,
strokeWeight: 1,
fillOpacity: 0.7
});
//Tooltip data_layer_1 click
google.maps.event.addListener(data_layer_1, 'click', function (e) {
var district = e.feature.j.CMC_Dis;
var ward = e.feature.j.CMC_Ward;
loadTooltip(district, ward);
});
function loadTooltip(district, ward) {
$.ajax({
url: LoadDisMapData,
type: 'POST',
data: { district: district, ward: ward },
dataType: 'json',
success: function (data) {
tooltip.show("Ward: <span style='font-weight: bold'>" + ward + "</span><br/>\
Population: <span style='font-weight: bold'>" + data.sumPopulation.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "</span><br/>\
PCR Done: <span style='font-weight: bold'>" + data.pcrDoneCount.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "</span><br/>\
Positive: <span style='font-weight: bold'>" + data.positiveCount.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "</span><br/>\
Deaths: <span style='font-weight: bold'>" + data.deathsCount.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") + "</span><br/>");
}
});
}
google.maps.event.addListener(data_layer_1, 'mouseout', function (e) {
tooltip.hide();
});
var tooltip = function () {
var id = 'tt';
var top = 3;
var left = 3;
var maxw = 300;
var speed = 10;
var timer = 20;
var endalpha = 95;
var alpha = 0;
var tt, t, c, b, h;
var ie = document.all ? true : false;
return {
show: function (v, w) {
if (tt == null) {
tt = document.createElement('div');
tt.setAttribute('id', id);
t = document.createElement('div');
t.setAttribute('id', id + 'top');
c = document.createElement('div');
c.setAttribute('id', id + 'cont');
b = document.createElement('div');
b.setAttribute('id', id + 'bot');
tt.appendChild(t);
tt.appendChild(c);
tt.appendChild(b);
document.body.appendChild(tt);
tt.style.opacity = 0;
tt.style.filter = 'alpha(opacity=0)';
document.onmousemove = this.pos;
}
tt.style.display = 'block';
c.innerHTML = v;
tt.style.width = w ? w + 'px' : 'auto';
if (!w && ie) {
t.style.display = 'none';
b.style.display = 'none';
tt.style.width = tt.offsetWidth;
t.style.display = 'block';
b.style.display = 'block';
}
if (tt.offsetWidth > maxw) { tt.style.width = maxw + 'px' }
h = parseInt(tt.offsetHeight) + top;
clearInterval(tt.timer);
tt.timer = setInterval(function () { tooltip.fade(1) }, timer);
},
pos: function (e) {
var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
tt.style.top = (u - h) + 'px';
tt.style.left = (l + left) + 'px';
},
fade: function (d) {
var a = alpha;
if ((a != endalpha && d == 1) || (a != 0 && d == -1)) {
var i = speed;
if (endalpha - a < speed && d == 1) {
i = endalpha - a;
} else if (alpha < speed && d == -1) {
i = a;
}
alpha = a + (i * d);
tt.style.opacity = alpha * .01;
tt.style.filter = 'alpha(opacity=' + alpha + ')';
} else {
clearInterval(tt.timer);
if (d == -1) { tt.style.display = 'none' }
}
},
hide: function () {
clearInterval(tt.timer);
tt.timer = setInterval(function () { tooltip.fade(-1) }, timer);
}
};
}();
问题是只有目标元素内的元素全屏显示。
所以你需要替换这一行
document.body.appendChild(tt);
和
document.getElementById('map_canvas').firstChild.appendChild(tt);