http://victorinox.pythonanywhere.com/static/js/manager_functions.js第143行有一个错误:
map.setCenter(google.maps.LatLng(loc.coords.latitude, loc.coords.longitude));
必须
map.setCenter(新google.maps.LatLng(loc.coords.latitude, loc.coords.longitude));
//------------^
还有什么:当用户拒绝 HTML5 地理位置的权限时,Firefox 不会触发错误回调。正因为如此,并且在其他任何地方都没有为地图设置中心,所以地图将不会加载,因为中心是必需的选项。
你可能认为 center 会在 initialize 中设置,但在 Firefox 中,当用户拒绝地理定位权限时,永远不会调用 initialize。看看这个:
$(function() {
//creates the map, no center will be set in createMap()
map = createMap();
//in firefox there will not be set a center
//when user denies permission, because error-callback will not execute
geolocalize();
// when the map
center = map.getCenter();
//will never run, because when the map doesn't have a center
//there will no tiles load
google.maps.event.addListenerOnce(map, 'tilesloaded', function() {
initialize();
});
})
建议:
目前你有一个闪烁的标记。您在多个事件(zoom_changed、dragend、resize)上重新加载标记,删除所有标记并根据 XHR 响应创建新标记。
相反,您应该为标记创建一个缓存(您可以在其中识别它们,例如基于 XHR 响应给出的一些 ID)。当您收到新响应时,仅当它们不在缓存内时才创建新标记,其他标记在地图上保持可见(当您删除/隐藏视口内不可见的标记时,我看不到任何好处)
此外,仅更新 bounds_changed 上的标记而不是 3 个事件就足够了。