我想在Gmap API上實現一個功能,如果縮放大於17,顯示所有標記(否則,只是隱藏它們)。但是,當我編寫如下代碼時,它不起作用。在帶有回調函數的谷歌地圖上放置多個標記
PS:該代碼可能是在語法和結構完全正確的,但它表達了我的意思
// @latlong is an array of tuple (latitude , longtitude)
// @myMap is the google map object passed to the function
function placeMarker(myMap , latlon)
{
for(var i = 0 ; i < latlon.length ; i ++)
{
myMarker = new google.maps.Marker({
position: new google.maps.LatLng(latlon[i][0], latlon[i][1])
});
google.maps.event.addListener(myMap, 'zoom_changed', function() {
zoomLevel = myMap.getZoom()
if(zoomLevel >= 17)
{
myMarker.setMap(myMap)
}
else
{
myMarker.setMap(null)
}
});
}
}
我只是改變我的代碼:
function placeMarker(myMap , latlon)
{
for(var i = 0 ; i < latlon.length ; i ++)
{
myMarker = new google.maps.Marker({
position: new google.maps.LatLng(latlon[i][0], latlon[i][1])
});
(function(myMarker_copy){
google.maps.event.addListener(myMap, 'zoom_changed', function() {
zoomLevel = myMap.getZoom()
if(zoomLevel >= 17)
{
myMarker_copy.setMap(myMap)
}
else
{
myMarker_copy.setMap(null)
}
});
}(myMarker));
}
}
而第二個版本作品。 我知道如何使它工作,但是,我真的不知道它爲什麼工作,爲什麼不工作。也許這與JS的函數閉包或參數傳遞原則有關(我已經檢查了很多引用,但其中一些只是持有不同的想法)。有人能幫我嗎?
真的很感激。
如果latlon變量是一個元組數組,那麼Latlon [0]是一個元組以及latlon [1]。您需要將標記構造函數傳遞給元組值,而不是元組本身。位置:'''position:new google.maps.LatLng(latlon [i] [0],latlon [i] [1])''' – amenadiel
是的,這是一個錯字,我修改了 – Cherish