kam*_*tka 6 google-maps infowindow google-maps-api-3
这会加载地图,获取新结果并删除旧结果:
google.maps.event.addListener(map, 'idle', function() {
updateMap();
});
Run Code Online (Sandbox Code Playgroud)
那部分效果很好.
当我点击一个标记打开它的InfoWindow时,我遇到了麻烦.打开InfoWindow会围绕标记重新定位地图,从而从上方触发侦听器,然后重置地图,隐藏InfoWindow.
以下是我创建标记/ InfoWindow的方法:
var infowindow = new google.maps.InfoWindow({});
function makeMarker(LatLong, markerName) { //this is called from a loop
var marker = new google.maps.Marker({
position: LatLong,
map: map,
title:markerName,
content: "html for the infoWindow"
});
//Detect marker click
google.maps.event.addListener(marker, "click", function() {
infowindow.setContent(this.content);
infowindow.open(map, marker);
});
}
Run Code Online (Sandbox Code Playgroud)
任何见解都非常感谢.
updateMap可能是潜在问题所在.当您更新地图时,您实际上不需要删除每个标记并再次添加它; 相反,你想删除你不再需要的那些,并添加你所做的那些.(不可否认,第一种策略更简单,适用于大多数用例.)
或者,我会探索两种方法:
存储一个全局变量,markerClick并实现类似于:
google.maps.event.addListener(map, 'idle', function() {
if(!markerClick){
updateMap();
markerClick = false;
}
});
google.maps.event.addListener(marker, "click", function() {
markerClick = true;
infowindow.setContent(this.content);
infowindow.open(map, marker);
});
Run Code Online (Sandbox Code Playgroud)
最明显的一点就是快速入侵,如果单击一个不触发空闲事件的标记(即中心或其他事件),肯定会造成麻烦.
不要再使用idle了.活动像dragend和zoom_changed可能更好地捕捉你正在寻找的特定用户交互.
| 归档时间: |
|
| 查看次数: |
12475 次 |
| 最近记录: |