-1

Я не вижу этого, я буду думать, если кто-то из вас посмотрит, он может сразу сказать мне, что я должен делать. Теперь я изменяю размер моего маркера, но он принимает только последний маркер массива.Как я могу получить доступ ко всем маркерам карт google

здесь код, который я буду цикл корыта массив маркеров объекта:

var locations = [ 
    [{id: 1, lat: 51.523229192354066, lng: 5.139241042480535, content: 'Title A'}], 
    [{id: 2, lat: 51.52309568310267, lng: 5.139251771316594, content: 'Title B'}], 
    [{id: 3, lat: 51.5229888754197, lng: 5.139434161529607, content: 'Title C'}], 
    [{id: 4, lat: 51.52284868995566, lng: 5.139487805709905, content: 'Title D'}], 
    [{id: 5, lat: 51.522715179588666, lng: 5.139670195922918, content: 'Title E'}], 
    [{id: 6, lat: 51.52258166883027, lng: 5.1397989419556325, content: 'Title F'}], 
    [{id: 7, lat: 51.52242813097418, lng: 5.139927687988347, content: 'Title G'}], 
    [{id: 8, lat: 51.52227793039666, lng: 5.139927687988347, content: 'Title H'}], 
    [{id: 9, lat: 51.522625059869696, lng:  5.138688507423467, content: 'Title I'}] 
]; 

for (i = 0; i < locations.length; i++) { 
     var myLatLng = {lat: locations[i][0].lat, lng: locations[i][0].lng}; 

    marker = new google.maps.Marker({ 
     position: myLatLng, 
     icon: icon1, 
     map: map 
    }); 


    map.addListener('zoom_changed', function() { 
     if (map.getZoom() === 17) { 
      marker.icon.scaledSize = new google.maps.Size(32, 32); 
      marker.icon.size = new google.maps.Size(32, 32); 
      marker.setMap(map); 
     } 
     if (map.getZoom() === 18) { 
      console.log(marker[i]); 
      marker.icon.scaledSize = new google.maps.Size(90, 90); 
      marker.icon.size = new google.maps.Size(90, 90); 
      marker.setMap(map); 
     } 
    }); 

Если я пытаюсь открыть маркер [я] .Icon она не определена. Пожалуйста, кто-нибудь поможет мне использовать размер всех маркеров.

Вот скрипка для лучшего обзора увеличивать и уменьшать масштаб, чтобы увидеть, что происходит только одно изменения маркеров в размере: https://jsfiddle.net/sylvanR/a8z0yyeq/10/

+0

Потому что это не массив 'marker'; – itzmukeshy7

ответ

1

Проблема заключается в следующем: вы зацикливание на все ваши маркера, добавив новый прослушиватель событий для события zoom_changed карты. В каждом из этих прослушивателей событий вы ссылаетесь на переменную . Эта функция прослушивателя событий не выполняется в момент ее определения, это происходит только тогда, когда масштабирование изменяется. Таким образом, в этот момент переменная будет равна тому, что было на последней итерации цикла for.

Вместо этого вы должны изменить способ установки этого слушателя событий, что-то вроде этого:

for (i = 0; i < locations.length; i++) { 
     var myLatLng = {lat: locations[i][0].lat, lng: locations[i][0].lng}; 

    marker = new google.maps.Marker({ 
     position: myLatLng, 
     icon: icon1, 
     map: map 
    }); 

    setMarkerSize(marker); 
} 

function setMarkerSize(marker) { 
    var icon = marker.icon; 
    map.addListener('zoom_changed', function() { 
     if (map.getZoom() === 16) { 
      icon.scaledSize = new google.maps.Size(15, 15); 
      icon.size = new google.maps.Size(15, 15); 
      marker.setIcon(icon); 
      console.log(marker.icon.size); 
     } 
     if (map.getZoom() === 17) { 
      icon.scaledSize = new google.maps.Size(32, 32); 
      icon.size = new google.maps.Size(32, 32); 
      marker.setIcon(icon); 
      console.log(marker.icon.size); 
     } 
     if (map.getZoom() === 18) { 
      icon.scaledSize = new google.maps.Size(90, 90); 
      icon.size = new google.maps.Size(90, 90); 
      marker.setIcon(icon); 
      console.log(marker.icon.size); 
     } 
    }); 
} 

В этом случае внутри функции setMarkerSize локальная переменная, которая будет отличаться каждый раз при вызове функции ,

+0

Можете ли вы изменить его в моей скрипке: https://jsfiddle.net/sylvanR/a8z0yyeq/10/ Потому что он не работает со мной – Sreinieren

+0

Если я зарегистрирую его, я вижу нужный размер в консоли, но значок не изменение размера. – Sreinieren

+0

где вы создаете 'icon1'? Возможно, вам придется использовать 'marker.setIcon (...)' с новым значком, используя необходимый размер и масштабируемый размер, а не просто корректировать свойства непосредственно на текущем значке маркера. – duncan

 Смежные вопросы

  • Нет связанных вопросов^_^