我目前正在为一家杂货店开发商店定位器。他们的网站是用 Drupal 构建的,但我从头开始编写商店定位器,而不是使用 Drupal 模块。
到目前为止,一切似乎都很好地结合在一起,但我不明白为什么当有人点击标记时我的信息窗口没有显示。在做了一些研究并尝试了不同的事情之后,下面的代码似乎有点反应:当点击一个标记时,地图会重新居中为气泡腾出空间,但气泡永远不会出现。
更新:
经过更多测试后,我发现确实创建了气泡。标记在那里,但由于某种原因,谷歌在点击时为其容器添加了display:none内联样式。现在我想知道如何防止这种情况发生?
非常感谢任何想法/帮助。
(function ($) {
Drupal.behaviors.storelocator = {
attach: function (context, settings) {
var map;
var markers_array = [];
google.maps.event.addDomListener(window, 'load', function() {
var mapOptions = {
position: new google.maps.LatLng(41.030, -73.411),
zoom: 10,
maxZoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var bounds = new google.maps.LatLngBounds();
$.get('/storelocator/storexml', function(xml) {
$(xml).find('marker').each(function() {
var banner_name = $(this).attr('name');
var address = $(this).attr('address');
var distance = parseFloat($(this).attr('distance'));
var latlng = new google.maps.LatLng(parseFloat($(this).attr('lat')), parseFloat($(this).attr('lng')));
createMarker(map, latlng, banner_name, address);
bounds.extend(latlng);
map.fitBounds(bounds);
});
});
});
function createMarker(map, latlng, banner_name, address) {
var icon_image = {
url: '/sites/default/modules/storelocator/images/' + banner_name + '.png',
size: new google.maps.Size(25, 30),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(12, 30)
}
var icon_shadow = {
url: '/sites/default/modules/storelocator/images/shadow.png',
size: new google.maps.Size(40, 30),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(12, 30)
}
var clickable_area = {
coord: [1, 1, 1, 30, 25, 30, 30, 1],
type: 'poly'
}
var marker = new google.maps.Marker({
map: map,
position: latlng,
shadow: icon_shadow,
icon: icon_image,
shape: clickable_area,
title: address,
html: '<strong>' + banner_name + '</strong><br/>' + address
});
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(this.html);
infoWindow.open(map, this);
});
markers_array.push(marker);
}
}
};
}(jQuery));