2

谷歌地圖標記在移動設備上不可點擊(觸摸屏)。
但是,在任何PC上都可以,所以我無法弄清楚什麼是重點。
這裏是我的代碼:谷歌地圖標記不能在移動設備上點擊

var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 10, 
    center: new google.maps.LatLng(60.037760, -44.100494), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

var locations = [ 
        ['4lvin', 60.074433, -44.011917], 
        ['5irius', 60.037760, -44.100494] 
       ]; 

for (var i = 0; i < locations.length; i++) { 
    var marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
     map: map 
    }); 

    var infowindow = new google.maps.InfoWindow(); 

    google.maps.event.addListener(marker, 'click', (function(marker, i) { 
     return function() { 
      infowindow.setContent('<h2>'+locations[i][0]+'</h2>\n<a>Read more..</a>'); 
      infowindow.open(map, this); 
     } 
    })(marker, i)); 
} 


但是,當我用下面的代碼(谷歌爲「google.maps.event.addListener」的正式的方式),標記都呈現只有相同的InfoWindows

var infowindow = new google.maps.InfoWindow({content: locations[i][0]}); 
    new google.maps.event.addListener(marker, 'click', function() { 
     infowindow.open(map,this); 
    }); 

回答

1

的問題是,因爲你正在做一個循環,你需要使用一個封閉,否則所有標記只會讓你想用最後一個標記關聯的內容。你的第一個代碼是正確的。建議你換再做同樣的:

var infowindow = new google.maps.InfoWindow({content: locations[i][0]}); 
google.maps.event.addListener(marker, 'click', function(marker, i) { 
    return function() { 
    infowindow.setContent(locations[i][0]); 
    infowindow.open(map,this); 
    } 
})(marker, i)); 
1

我發現以下解決方案: 1.創建標記與選項

"optimized: false" : ex => new google.maps.Marker({..., optimized: false, ...}); 
  • 添加另一事件監聽
  • google.maps.event.addDomListener(marker, "click", function() {...});

    From google forum