我知道这是一个相当老的问题,但我想我可以根据我最近使用gmap3
Google Maps API 的经验添加一些输入。
而不是沿着使用infobox
库的路线(我发现使用 gmap3 库有点麻烦)我决定通过绑定标记单击事件来生成一个覆盖层,我可以根据需要设置它的样式。
所以,我会有我的 JSON 和我的所有地址,就像这样
// JSON
var data = JSON.parse('[
{
"address":"New Street, Salisbury, UK",
"content":"hello world from salisbury"
},
{
"address":"86000 Poitiers, France" ,
"content":"hello world from poitiers"
},
{
"address":"66000 Perpignam, France",
"content":"hello world from perpignam"
}
]');
我设置了我的 gmap 默认值
// Gmap Defaults
$map.gmap3({
map:{
options:{
center:[46.578498,2.457275],
zoom: 5
}
}
});
我遍历我的 JSON 并构建地图
// Json Loop
$.each(data, function(key, val) {
$map.gmap3({
marker:{
values:[{
address:val.address,
events: {
click: function() {
gmap_clear_markers();
$(this).gmap3({
overlay:{
address:val.address,
options:{
content: '<div class="infobox">'+val.content+'</div>',
offset:{
y:-32,
x:12
}
}
}
});
}
}
}]
}
});
});
该gmap_clear_markers()
函数触发所有其他信息框(覆盖)实例被删除。
// Function Clear Markers
function gmap_clear_markers() {
$('.infobox').each(function() {
$(this).remove();
});
}
现在我可以向我的 JSON 添加任意数量的地址,它将有一个信息框,其中只有一个带有类信息框的普通 div 包装器,我可以相应地设置它的样式。
我不确定这是否是最好的方法——我只是说这对我有用。
这是JSFIDDLE 示例