我已经尝试了一些我在 StackOverflow 上找到的东西,但我对此没有任何运气。我对我的 Javascript 很生疏,所以如果让这项工作变得超级简单,我不会感到惊讶。
我正在为一个网站构建一个谷歌地图系统,并且我正在使用 infoBox 系统,以便我可以更好地控制弹出窗口的视觉风格。我的问题是我只想在任何给定时刻打开一个信息框。因此,只要单击 1 个标记,之前的 infoBox 就会关闭。我知道最好的方法是跟踪要打开的最后一个是什么,但是使用循环来构建所有内容,我不确定如何获取特定 infoBox 的实例名称以使用 close() 函数。
这是我的 Javascript:
var map;
var markers = new Array();
// This function builds out the Google Map
function initialize() {
// Set the center point of the map to be create
var mapCenter = new google.maps.LatLng(40.0378755, -76.3055144);
// Create a map object, and include the MapTypeId to add to the map type control.
// This is where we specify the UI settings for the map.
var mapOptions = {
center: mapCenter,
zoom: 8,
disableDefaultUI: false,
panControl: false,
zoomControl: true,
mapTypeControl: true,
scaleControl: true,
scaleControlOptions: {position: google.maps.ControlPosition.RIGHT_BOTTOM},
streetViewControl: false,
overviewMapControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP,
};
// Draw the map on-screen.
map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
};
// This function creates pins for the map.
var descriptionBox;
(function () {
google.maps.Map.prototype.markers = new Array();
google.maps.Map.prototype.addMarker = function(marker) {
this.markers[this.markers.length] = marker;
};
})();
//This function builds the locations and information for the markers and infoboxes
function showOverlays() {
//Set data for individual marker
var a = new Array();
var t = new Object();
t.name = "Alert at this Location"
t.desc = "Here's a brief description."
t.lat = 40.3178755
t.lng = -75.9155144
t.icon = "low"
a[0] = t;
//Set data for individual marker
var t = new Object();
t.name = "Moderate priority Issue Here."
t.desc = "Read this text."
t.lat = 40.4178755
t.lng = -75.8155144
t.icon = "mid"
a[1] = t;
//Set data for individual marker
var t = new Object();
t.name = "HIGH PRIORITY!"
t.desc = "This is some text"
t.lat = 40.5178755
t.lng = -75.4155144
t.icon = "high"
a[2] = t;
//Set data for individual marker
var t = new Object();
t.name = "Another Mid Alert"
t.desc = "Description would go here. This is a longer description to show how it would be handled."
t.lat = 39.4178755
t.lng = -77.4155144
t.icon = "mid"
a[3] = t;
//Set data for individual marker
var t = new Object();
t.name = "ALERT!!! READ ME!"
t.desc = "More Text Here"
t.lat = 40.3178755
t.lng = -76.3155144
t.icon = "high"
a[4] = t;
//Gather the data for each individual marker, and put the data in a usable format.
for (var i = 0; i < a.length; i++) {
var latlng = new google.maps.LatLng(a[i].lat, a[i].lng);
var markerIcon = a[i].icon;
var heading = a[i].name;
var description = a[i].desc;
var infoContent = "<h1>"+heading+"</h1><p>"+description+"</p>";
map.addMarker(createMarker(a[i].name,latlng,markerIcon,infoContent));
}
//Builds and places the markers on the map.
function createMarker(name, latlng, icon, infoContent) {
var marker = new google.maps.Marker({position: latlng, map: map, icon: "images/"+markerIcon+"_icon.png"});
//Create event listener to know when a marker is clicked on.
google.maps.event.addListener(marker, "click", function() {
var descriptionBox
descriptionBox = new InfoBox();
//Settings for the infoBox
var myOptions = {
content: infoContent
,boxClass: "myInfoBoxStyle"
,disableAutoPan: false
,maxWidth: 0
,pixelOffset: new google.maps.Size(0, 0)
,zIndex: null
,closeBoxMargin: "2px 2px 2px 2px"
,closeBoxURL: "images/close.gif"
,infoBoxClearance: new google.maps.Size(1, 1)
,isHidden: false
,pane: "floatPane"
,enableEventPropagation: false
};
//Close any open boxes
descriptionBox.close();
//Create new infoBox instance
descriptionBox = new InfoBox(myOptions);
//Draw infoBox on the map.
descriptionBox.open(map, marker);
});
return marker;
};
};
有一个被点击的按钮调用 showOverlays(); 功能在地图上显示标记。
那么我错过了什么?任何帮助将不胜感激。