I made a service which saves places to localStorage
after the user clicks the left mouse button on the map. When the user clicks the right mouse button on the marker, that marker is removed from localStorage
.
var map,
markersAll = [];
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: {lat: -25.363, lng: 131.044}
});
renderMarkers();
map.addListener('click', function(e) {
var lat = e.latLng.lat();
var lng = e.latLng.lng();
generateMarker(lat, lng);
//console.log(lat, lng);
});
}
function getMarkersFromLocalStorage() {
return localStorage.markers ? JSON.parse(localStorage.markers) : [];
};
function addMarkerToLocalStorage(lat, lng) {
var markers = getMarkersFromLocalStorage();
markers.push({lat, lng});
localStorage.markers = JSON.stringify(markers);
};
function removeMarkerFromLocalStorage(lat, lng) {
var markers = getMarkersFromLocalStorage(),
newMarkers = [];
markers.forEach(function(marker) {
if(marker.lat != lat && marker.lng != lng) {
newMarkers.push({
lat: marker.lat,
lng: marker.lng
});
}
});
localStorage.markers = JSON.stringify(newMarkers);
};
function clearMarkers() {
markersAll.forEach((marker) => {
marker.setMap(null);
});
};
function renderMarkers() {
var markers = getMarkersFromLocalStorage();
markers.forEach(function(marker) {
//console.log(marker.lat, marker.lng);
generateMarker(marker.lat, marker.lng);
});
};
function generateMarker(lat, lng) {
var marker = new google.maps.Marker({
position: {lat: lat, lng: lng}
});
marker.setMap(map);
markersAll.push(marker);
addMarkerToLocalStorage(lat, lng);
marker.addListener('rightclick', function(e) {
var lat = e.latLng.lat();
var lng = e.latLng.lng();
//console.log('right click', lat, lng);
clearMarkers();
removeMarkerFromLocalStorage(lat, lng);
renderMarkers();
});
return marker;
};
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 100%;
}
<div id="map"></div>