【发布时间】:2021-08-29 03:54:10
【问题描述】:
我知道代码很乱,我在某个地方找到了它。而且我看到很多函数被多次调用,我不知道如何解决这个问题。我从未与 localStorage 合作过,但我需要这个时间。当我刷新在 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);
});
}
let markers = getMarkersFromLocalStorage()
console.log(markers)
function getMarkersFromLocalStorage(){
return localStorage.markers ? JSON.parse(localStorage.markers) : []
}
function addMarkerToLocalStorage(lat, lng) {
markers.push({lat, lng});
localStorage.markers = JSON.stringify(markers);
};
function removeMarkerFromLocalStorage(lat, lng) {
let 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() {
markers.forEach(function(marker) {
console.log(marker.lat, marker.lng);
generateMarker(marker.lat, marker.lng);
});
};
var marker
var icon = {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
strokeColor: "blue",
scale: 3
}
function generateMarker(lat, lng) {
marker = new google.maps.Marker({
position: {lat: lat, lng: lng},
map: map,
icon: icon
});
marker.setMap(map);
markersAll.push(marker);
addMarkerToLocalStorage(lat, lng);
// changing icon on click
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();
});
marker.addListener('click', changeColor);
};
function changeColor(evt) {
this.setIcon(pinSymbol('blue'));
}
function pinSymbol(color) {
return {
path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z',
fillColor: color,
fillOpacity: 1,
strokeColor: '#000',
strokeWeight: 2,
scale: 1
};
}
// clear all markers
document.getElementById('clear-all-markers').addEventListener('click', clearAllMarkers)
function clearAllMarkers(){
localStorage.clear()
}
【问题讨论】:
标签: javascript google-maps local-storage google-maps-markers