我正在尝试检查图像是否存在,以便可以相应地调整contentString。但是,当我尝试执行此操作时,地图上仅显示一个针脚(第一个)。
var checkins = <?php echo $json; ?>;
function imageExists(url, callback) {
var img = new Image();
img.onload = function() { callback(true); };
img.onerror = function() { callback(false); };
img.src = url;
}
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: {lat: 39.8282, lng: -98.5795}
});
setMarkers(map);
}
function setMarkers(map) {
var infowindow = new google.maps.InfoWindow({
content: ""
});
for (var i = 0; i < checkins.length; i++) {
var checkin = checkins[i];
var marker = new google.maps.Marker({
position: {lat: parseFloat(checkin[2]), lng: parseFloat(checkin[3])},
map: map,
title: checkin[1]
});
var imageUrl = 'http://rjbogz.ddns.net/pictures/'+checkin[0]+'.jpg';
imageExists(imageUrl, function(exists) {
if (exists){
contentString = '<b>'+checkin[6]+'</b><br><b>'+checkin[4]+'</b> by <b>'+checkin[5]+'</b><br>At <b>'+checkin[1]+'</b><br><img src="pictures/'+checkin[0]+'.jpg" style="width:300px;height:300px;">';
bindInfoWindow(marker, map, infowindow, contentString);
} else {
contentString = '<b>'+checkin[6]+'</b><br><b>'+checkin[4]+'</b> by <b>'+checkin[5]+'</b><br>At <b>'+checkin[1]+'</b>';
bindInfoWindow(marker, map, infowindow, contentString);
}
});
}
}
function bindInfoWindow(marker, map, infowindow, description) {
marker.addListener('click', function() {
infowindow.setContent(description);
infowindow.open(map, this);
});
}
如通过
imageExists
函数可以看到的,我尝试添加检查以查看图像是否存在,但随后它仅在地图上绘制了一个图钉。如果您要查看网站的外观,当前会将其发布到http://rjbogz.ddns.net/map.php。我要修复的一个示例是,如果您单击百慕大中的图标(没有与之关联的图像文件)。 最佳答案
您已经很接近了,if (ImageExists(image) != 0) {
仅存在几个问题
首先,您已将该函数声明为ImageExist
,因此需要修复该错字。其次,您可能想将if(ImageExists(image) != 0) {
更改为if(ImageExists(image)) {
,因为您的函数将返回布尔值。
最后,您的contentString
中有一些未公开的HTML。
对您的代码进行这些调整应该可以解决它,它看起来像这样:
if (ImageExist(image)) {
contentString = '<b>'+checkin[6]+'</b><br><b>'+checkin[4]+'</b> by <b>'+checkin[5]+'</b><br>At <b>'+checkin[1]+'</b><br><img src="pictures/'+checkin[0]+'.jpg" style="width:300px;height:300px;">';
} else {
contentString = '<b>'+checkin[6]+'</b><br><b>'+checkin[4]+'</b> by <b>'+checkin[5]+'</b><br>At <b>'+checkin[1]+'</b>';
}
您可以在JS小提琴中查看它的工作原理:https://jsfiddle.net/igor_9000/ts9udgn7/4/
以及一个更新的小提琴,显示了它如何处理placehold.it中的图像:https://jsfiddle.net/igor_9000/ts9udgn7/6/
希望有帮助!