JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://maps.googleapis.com/maps/api/js?"></script>
<div id="sum" class="sum">0</div>
<div id="map" class="map"></div>
CSS
.map {
height: 500px;
}
.sum {
border-bottom: 1px solid #ccc;
margin-bottom: 20px;
padding-bottom: 20px;
}
.sum:after {
content: ' руб'
}
JavaScript
class Calc {
constructor () {
// Данные по объектам
this.objects = [
{
id: 1,
title: 'Название объекта 1',
price: 10000,
mapPosition: { // Координаты объекта на карте
lat: -34.397,
lng: 150.644
}
},
{
id: 2,
title: 'Название объекта 2',
price: 20000,
mapPosition: { // Координаты объекта на карте
lat: 34.397,
lng: 170.123
}
},
{
id: 3,
title: 'Название объекта 3',
price: 30000,
mapPosition: { // Координаты объекта на карте
lat: 10.987,
lng: 54.456
}
}
];
// Объект с картой
this.map = null;
// Маркеры на карте
this.mapMarkers = [];
// Выбранные маркеры
this.selectObjects = [];
// Сумма выбранных объектов
this.currentSum = 0;
// Элементы калькулятора
this.calcElements = {
map: document.getElementById('map'),
sum: document.getElementById('sum')
};
this.initMap();
}
// Инициализация карты
initMap () {
this.map = new google.maps.Map(this.calcElements.map, {
zoom: 2
});
// Запускаем установку обхектов на карту
this.setObjectsInMap(this.objects);
}
// Добавить маркер на карту
addMarker (markerData) {
let self = this;
// Создание маркера на карте
let marker = new google.maps.Marker({
position: markerData.mapPosition,
map: this.map,
animation: google.maps.Animation.DROP,
id: markerData.id
});
// Вешаем клик на маркер
marker.addListener('click', function () {
self.onSelectMarker(this);
});
// Центрируем карту по координатам маркера
this.map.setCenter(markerData.mapPosition);
// Пушим все установленные маркеры
this.mapMarkers.push(marker);
}
// Установить объекты на карту
setObjectsInMap (objects) {
objects.forEach(item...