gpt4 book ai didi

javascript - 检测点击是否在 OverlayView 内部

转载 作者:搜寻专家 更新时间:2023-11-01 04:38:07 25 4
gpt4 key购买 nike

我想在用户单击 map 上的任意位置时显示某个信息框,并在用户在 OverlayView 内部单击时显示不同的信息框。

我正在为 map 对象的点击事件添加一个监听器,但是这个事件只提供了一个 latLong 参数,这似乎不足以判断是否点击了 OverlayView。

    google.maps.event.addDomListener(map, 'click', function(param) {
// if( an OverlayView was clicked)
// showInfoboxForOverlayView();
// else
// showStandarInfobox();
});

我知道我可以为 OverlayView 对象添加一个单独的监听器,但是当我这样做时,两个事件都会被触发(一个来自 OverlayView 对象,一个来自 map 对象)。

这就是我构建 OverlayView 对象的方式,

    var overlay = new google.maps.OverlayView();
overlay.onAdd = function () {

var layer = d3.select(this.getPanes().overlayMouseTarget).append("div").attr("class", "SvgOverlay");
var svg = layer.append("svg");
var adminDivisions = svg.append("g").attr("class", "AdminDivisions");

overlay.draw = function () {
var markerOverlay = this;
var overlayProjection = markerOverlay.getProjection();

// Turn the overlay projection into a d3 projection
var googleMapProjection = function (coordinates) {
var googleCoordinates = new google.maps.LatLng(coordinates[1] + 0.0005, coordinates[0] - 0.0006);
var pixelCoordinates = overlayProjection.fromLatLngToDivPixel(googleCoordinates);
return [pixelCoordinates.x + 4000, pixelCoordinates.y + 4000];
}

path = d3.geo.path().projection(googleMapProjection);
adminDivisions.selectAll("path")
.data(geoJson.features)
.attr("d", path) // update existing paths
.enter().append("svg:path")
.attr("d", path);;
};
};

有什么想法吗?

最佳答案

尝试在覆盖元素的处理程序中使用全局事件对象的cancelBubble标志:

event.cancelBubble = true;

这应该可以防止触发第二个点击处理程序。

关于javascript - 检测点击是否在 OverlayView 内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13114236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com