每次我刷新本地存储中的页面项目重复项
Everytime I refresh page items duplicates in local storage
我知道我在某处找到的代码一团糟。我看到很多函数被多次调用,我不知道如何解决。我从未使用过 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()
}
每次您的页面运行时,它都会创建标记并将它们添加到本地存储。
function addMarkerToLocalStorage(lat, lng) {
markers.push({lat, lng});
localStorage.markers = JSON.stringify(markers);
};
上面的函数就是这样做的。但是这个函数没有任何检查标记是否存在的逻辑,而且在不知道用例是什么的情况下,我不确定它是什么意思。
代码有清除所有标记的功能
// clear all markers
document.getElementById('clear-all-markers').addEventListener('click', clearAllMarkers)
function clearAllMarkers(){
localStorage.clear()
}
但这附加到上面显示的“清除所有标记”按钮。
您可以通过调用 clearAllMarkers(); 强制代码自动清除标记;在代码的最顶部运行;像这样:
var map,
markersAll = [];
clearAllMarkers(); // this will clear local storage
另一种选择是更改 addMarkerToLocalStorage 代码,以便它检查标记是否存在,这将防止许多标记从一个位置存在 - 同样,这可能不是您想要的用例
function addMarkerToLocalStorage(lat, lng) {
var add = true;
// check if this marker exists!
markers.forEach(function(marker){
if (marker.lat===lat && marker.lng===lng) add=false;
})
// did we find the marker? exit
if (add===false) return;
markers.push({lat, lng});
localStorage.markers = JSON.stringify(markers);
};
我想选项二可能是您所需要的,但根据您提供的信息,我不知道这段代码的用例是什么。
我知道我在某处找到的代码一团糟。我看到很多函数被多次调用,我不知道如何解决。我从未使用过 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()
}
每次您的页面运行时,它都会创建标记并将它们添加到本地存储。
function addMarkerToLocalStorage(lat, lng) {
markers.push({lat, lng});
localStorage.markers = JSON.stringify(markers);
};
上面的函数就是这样做的。但是这个函数没有任何检查标记是否存在的逻辑,而且在不知道用例是什么的情况下,我不确定它是什么意思。
代码有清除所有标记的功能
// clear all markers
document.getElementById('clear-all-markers').addEventListener('click', clearAllMarkers)
function clearAllMarkers(){
localStorage.clear()
}
但这附加到上面显示的“清除所有标记”按钮。
您可以通过调用 clearAllMarkers(); 强制代码自动清除标记;在代码的最顶部运行;像这样:
var map,
markersAll = [];
clearAllMarkers(); // this will clear local storage
另一种选择是更改 addMarkerToLocalStorage 代码,以便它检查标记是否存在,这将防止许多标记从一个位置存在 - 同样,这可能不是您想要的用例
function addMarkerToLocalStorage(lat, lng) {
var add = true;
// check if this marker exists!
markers.forEach(function(marker){
if (marker.lat===lat && marker.lng===lng) add=false;
})
// did we find the marker? exit
if (add===false) return;
markers.push({lat, lng});
localStorage.markers = JSON.stringify(markers);
};
我想选项二可能是您所需要的,但根据您提供的信息,我不知道这段代码的用例是什么。