Javascript 如何为列表中的每个标记创建单独的侦听器
我有一个坐标表,我用它在地图上设置标记。标记仅以小于12倍的放大率出现在地图上。我想在单击标记时,执行一些函数,并且只执行一次 下面是它现在是如何发生的:Javascript 如何为列表中的每个标记创建单独的侦听器,javascript,google-maps,Javascript,Google Maps,我有一个坐标表,我用它在地图上设置标记。标记仅以小于12倍的放大率出现在地图上。我想在单击标记时,执行一些函数,并且只执行一次 下面是它现在是如何发生的: for (let i = 0; i < locationsCoordinates.length; i++) { const bridge = locationsCoordinates[i]; markers.push( new google.maps.Marker({ position: bridge[1
for (let i = 0; i < locationsCoordinates.length; i++) {
const bridge = locationsCoordinates[i];
markers.push( new google.maps.Marker({
position: bridge[1],
title: bridge[0],
map,
icon: 'img/bridges.png',
clickable: true,
}));
}
google.maps.event.addListener(map, 'zoom_changed', function() {
let zoom = map.getZoom();
if (zoom < 12) {
for (let i = 0; i < markers.length; i++) {
markers[i].setVisible(false);
markers[i].addListener("click", function (event) {
test +=1;
});
}
}
else {
for (let i = 0; i < markers.length; i++) {
markers[i].setVisible(true);
}
}
})
for(设i=0;i
问题是,对于这样的代码,当您单击任何标记时,函数会运行多次。请帮我解决这个问题,你需要使用和重构一下你的代码。像这样的
var locationsCoordinates = [{lat: 12.84, lng: 122.89}, {lat: 12.80, lng: 122.93}, {lat: 12.74, lng: 122.85}];
var markers = [];
for (let i = 0; i < locationsCoordinates.length; i++) {
var marker = new google.maps.Marker({
position: locationsCoordinates[i],
map
});
google.maps.event.addListenerOnce(marker, "click", () => {
console.log("marker", i, "clicked");
});
markers.push(marker);
}
google.maps.event.addListener(map, 'zoom_changed', function() {
let zoom = map.getZoom();
if (zoom < 12) {
for (let i = 0; i < markers.length; i++) {
markers[i].setVisible(false);
}
} else {
for (let i = 0; i < markers.length; i++) {
markers[i].setVisible(true);
}
}
})
var-locationsCoordinates=[{lat:12.84,lng:122.89},{lat:12.80,lng:122.93},{lat:12.74,lng:122.85}];
var标记=[];
for(设i=0;i{
log(“marker”,i,“clicked”);
});
标记器。推(标记器);
}
google.maps.event.addListener(映射'zoom_changed',函数(){
让zoom=map.getZoom();
如果(缩放<12){
for(设i=0;i
相关问题:
创建标记时,将侦听器添加到标记,如相关示例所示。不在地图上的事件侦听器中
不确定为什么在标记隐藏(.setVisible(false)
case)时添加侦听器,而不是在标记显示时添加侦听器,但是如果在创建标记时将侦听器添加到标记,则无需执行任何特殊操作
相关问题使用函数闭包将标记与其InfoWindow
内容关联(或单击标记时要执行的任何操作),下面的代码使用let
关键字,这是该问题的现代解决方案,但也可以使用函数闭包,尤其是当您需要支持较旧的浏览器时
for (let i = 0; i < locationsCoordinates.length; i++) {
const bridge = locationsCoordinates[i];
let marker = new google.maps.Marker({
position: bridge[1],
title: bridge[0],
map,
icon: 'img/bridges.png',
clickable: true,
});
markers.push(marker);
google.maps.event.addListener(marker, 'click', function(evt) {
infowindow.setContent(locationsCoordinates[i][0]);
infowindow.open(map, marker);
test += 1;
});
}
google.maps.event.addListener(map, 'zoom_changed', function() {
let zoom = map.getZoom();
if (zoom < 12) {
for (let i = 0; i < markers.length; i++) {
markers[i].setVisible(false);
}
} else {
for (let i = 0; i < markers.length; i++) {
markers[i].setVisible(true);
}
}
})
复杂标记图标