gpt4 book ai didi

javascript - OpenLayers 使用 Popups 窃取点击事件

转载 作者:行者123 更新时间:2023-12-01 10:06:06 25 4
gpt4 key购买 nike

为什么 FramedCloud 弹出窗口会窃取弹出窗口内的点击事件?

current_popup = new OpenLayers.Popup.FramedCloud(
"featurePopup",
f.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size(0,0),
"<b>Наблюдения</b><br/>" + $.map(features, function(fe) { return fe.attributes.description; }).join('<br/>'),
null, false, null);
map.addPopup(current_popup, true);



$('#map').on('click', function() { console.log('test'); return false; });

始终捕获单击事件,除非我单击弹出窗口中的链接。弹出窗口和 anchor 是 #map 的后代。

  • 点击 map => 触发回调
  • 点击一个标记 => 触发回调,显示弹出窗口
  • 在弹出窗口中单击(而不是在链接上)=> 未触发回调
  • 单击弹出窗口中的链接 => 同样,没有任何反应

OL那部分的代码比较晦涩。

为什么它会在弹出窗口中捕获点击?我该如何取回它们?

编辑:在 OL 中进行更深入的调试:此函数已触发:

bindAsEventListener: function(func, object) {
return function(event) {
return func.call(object, event || window.event);
};

event.target 是 anchor ,正是我所期望的:

<a class="edit-card-link" href="/form/?id=806">...</a>

func 是:

handleBrowserEvent: function(evt) {
var type = evt.type, listeners = this.listeners[type];
if (!listeners || listeners.length == 0) {
return;
}
var touches = evt.touches;
if (touches && touches[0]) {
var x = 0;
var y = 0;
var num = touches.length;
var touch;
for (var i = 0; i < num; ++i) {
touch = touches[i];
x += touch.clientX;
y += touch.clientY;
}
evt.clientX = x / num;
evt.clientY = y / num;
}
if (this.includeXY) {
evt.xy = this.getMousePosition(evt);
}
this.triggerEvent(type, evt);
}

this是OpenLayers.Event类的实例,evt.target还是那个anchor,listeners包含1个监听器:

function (evt){OpenLayers.Event.stop(evt,true);}

是这个原因吗?怎么取出来?

最佳答案

如果你想阻止弹出窗口窃取鼠标事件,那么在你的 CSS 中你可以,as suggested here , 设置 pointer-events: none; 对应于创建时给定的弹出 id 的 id。因此,在您的情况下,它将是:

#featurePopup{
pointer-events: none;
}

当我想避免在 mouseover 上显示的弹出窗口闪烁时,它对我来说就像一个魅力。

关于javascript - OpenLayers 使用 Popups 窃取点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10448328/

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