Javascript MarkerWithLabel-拖动事件与单击事件类似
我在地图上单击设置了一个标记。我使用MarkerWithLabel 我使用可拖动的标记 如果我拖动一个标记,它可以正常工作。但如果我拖动标签,它会与地图上的单击事件一起工作 如何使用标签并在没有单击事件的情况下拖动标签 在我的示例中,当我拖动一个标记时,JS会创建一个新的标记Javascript MarkerWithLabel-拖动事件与单击事件类似,javascript,google-maps,google-maps-markers,Javascript,Google Maps,Google Maps Markers,我在地图上单击设置了一个标记。我使用MarkerWithLabel 我使用可拖动的标记 如果我拖动一个标记,它可以正常工作。但如果我拖动标签,它会与地图上的单击事件一起工作 如何使用标签并在没有单击事件的情况下拖动标签 在我的示例中,当我拖动一个标记时,JS会创建一个新的标记 google.maps.event.addListener(map, 'click', function(event) { addMarker(event.latLng) }); functi
google.maps.event.addListener(map, 'click', function(event) {
addMarker(event.latLng)
});
function addMarker(latLng) {
var marker = new MarkerWithLabel({
position: latLng,
map: map,
draggable: true,
labelContent: "example",
labelAnchor: new google.maps.Point(30, 0),
labelClass: "labels", // the CSS class for the label
labelStyle: {opacity: 0.75}
});
google.maps.event.addListener(marker, 'dragend', function(e) {
alert(2);
})
}
他们的页面显示了您在行动中寻找的内容
function your_function(e) { //Callback function
console.log("Drag: " + e.latLng.toString());
}
//Create map using the #map_canvas element
var map = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 12,
center: new google.maps.LatLng(49.47805, -123.84716),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
//Create new MarkerWithLabel (enhanced version of a Marker)
var marker = new MarkerWithLabel({
position: new google.maps.LatLng(49.47805, -123.84716),
draggable: true,
raiseOnDrag: true,
map: map, //Attach to map
labelContent: "example",
labelAnchor: new google.maps.Point(22, 0),
labelClass: "labels" // the CSS class for the label
});
//Finally add a listener to the marker to call your_function when "drag" event has occurred.
google.maps.event.addListener(marker, "drag", your_function );
我想这就是你所需要的魔法
编辑:在进一步调查您的小提琴后,我注意到一个事件气泡从标记标签泄漏到地图。由于没有已知的方法可以阻止事件传播冒泡到其他类型,因此可以设置一个变量来跟踪此场景,并在触发后清除它。您可以选择在与map相同的范围内设置一个实际的局部变量,这两种方法都可以
.除非您有其他解决方案,否则您可以尝试以下方法:
var map, dragended;
// ...
google.maps.event.addListener(map, 'click', function(event) {
if(!dragended) {
addMarker(event.latLng);
}
dragended = false;
});
google.maps.event.addListener(marker, 'dragend', function(e) {
var target = e.target || e.srcElement;
if(target && target.className == 'labels') {
dragended = true;
}
alert(2);
});
开始拖动()时,将触发
单击事件。这是一个使用全局变量的恶意攻击,但如果没有其他解决方案,它就会起作用。尝试使用更改,这是markerwithlabel.js中更改的代码。通过此操作,您可以避免或忽略使用标记dragend或标签dragend单击标签。来自文档-单击-当用户单击地图时(但不是当他们单击标记或信息窗口时)会触发此事件。但与标签无关。如果拖动标签,地图将创建新的标记。但是映射不应该对拖拽标签做出反应,因为google.maps.event.addListener(映射,'click',函数(event){addMarker(event.latLng)})代码>完全正确。但我不想要它。我想拖动一个标记并创建它。不是同一时间。从文档-单击-当用户单击地图时(但不是当他们单击标记或信息窗口时)触发此事件。但这对标签不起作用。让我看看能不能把这把小提琴清理一下。@LaughtDonor,谢谢