JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://maps.google.com/maps/api/js?sensor=false"></script>
<div id="map-canvas" ></div>
<input data-marker="car" id="car" type="radio" name="myMarkers">
<label for="car">car</label>
<input data-marker="second" id="second" type="radio" name="myMarkers" checked>
<label for="second">second</label>
<input data-marker="third" id="third" type="radio" name="myMarkers">
<label for="third">third</label>
<input data-marker="showall" id="showall" type="radio" name="myMarkers">
<label for="showall">Показать все</label>
CSS
#map-canvas {
height: 300px;
width: 100%;
}
#map-canvas img {
max-width: none;
}
#map-canvas div {
-webkit-transform: translate3d(0, 0, 0);
}
JavaScript
let map, googleMarkers = {} // карта и объект содержащий объекты гугл маркеров
const infowindow = new google.maps.InfoWindow();
const radios = document.querySelectorAll('input[type=radio][data-marker]')
const myMarkers = { // описание маркеров
car: {
'Title 1': {
coord: [52.4357808, 4.991315699999973],
text: '!!!!!!!!!!!!!'
}
},
second: { // имя группы
options: { // опции для маркеров этой группы
icon: 'http://maps.google.com/mapfiles/ms/icons/green-dot.png'
},
'Title 2': {
coord: [52.4357808, 4.981315699999973],
text: 'hello, world!!'
},
'Title 3': {
coord: [52.4555687, 5.039231599999994],
text: 'fuck fuck fuck'
}
},
third: {
options: {
icon: 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png',
animation: google.maps.Animation.BOUNCE
},
'Title 4': {
coord: [52.4755687, 5.019261599999994],
text: '2 * 2 = 5'
},
'Title 5': {
coord: [52.4555687, 5.049231599999994],
text: 'abcdefghi...'
},
'Title 6': {
coord: [52.4055687, 5.039236599999994],
text: 'учите JS'
}
}
}
initMap()
// для каждой радио-кнопки добавляет слушатель события клика
radios.forEach(i => i.addEventListener('click', radioClick))
function initMap() {
const center = new google.maps.LatLng(52.4527808, 4.991315699999973)
const mapOptions = {
zoom: 11,
center,
mapTypeId: google.maps.MapTypeId.TERRAIN
}
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions)
setMarkers(map)
}
function setMarkers (map) {
let isFirst = true
for (let group in myMarkers) {
for (let title in myMarkers[group]) {
if (title === 'options') // не берет во внимание опции
continue
const myMarker = myMarkers[group][title]
const visible = document.querySelector(`input[type=radio][data-marker=${group}]`).checked
const marker = new google.maps.Marker({
title,
...