Javascript OpenLayers6检测光标何时离开地图
我想隐藏光标离开地图时附着到光标的圆。当光标进入Javascript OpenLayers6检测光标何时离开地图,javascript,openlayers-6,Javascript,Openlayers 6,我想隐藏光标离开地图时附着到光标的圆。当光标进入ol.control时,此圆圈也必须隐藏。 在较旧的OL版本中,我只是简单地将一个mouseleave侦听器添加到canvas对象中,但在OL6中,不能保证画布存在,并且对于OL viewport下面的所有元素,这些基本事件的传播似乎都会停止 如何在OL6中实现此行为?控件需要单独的侦听器。我的上下文菜单代码(在控件上不活动)如下所示 var controlOver = false; function setControlOver(element
ol.control
时,此圆圈也必须隐藏。
在较旧的OL版本中,我只是简单地将一个mouseleave
侦听器添加到canvas
对象中,但在OL6中,不能保证画布存在,并且对于OL viewport
下面的所有元素,这些基本事件的传播似乎都会停止
如何在OL6中实现此行为?控件需要单独的侦听器。我的上下文菜单代码(在控件上不活动)如下所示
var controlOver = false;
function setControlOver(element) {
element.addEventListener('mouseover', function() { controlOver = true; });
element.addEventListener('mouseout', function() { controlOver = false; });
}
setTimeout(function() {
var controls = map.getViewport().getElementsByClassName('ol-control');
for (var i=0; i<controls.length; i++) {
setControlOver(controls[i]);
}
map.getControls().on('add', function(e) {
// ????? setControlOver(e.element.getElement());
});
}, 250);
map.getOverlays().on('add', function(e) {
setControlOver(e.element.getElement());
});
var canvas = map.getViewport().getElementsByClassName('ol-overlaycontainer-stopevent')[0];
canvas.addEventListener('contextmenu', function (e) {
if (!controlOver) {
e.preventDefault();
openContextMenu(e.x, e.y);
}
});
var controlOver=false;
函数setControlOver(元素){
addEventListener('mouseover',function(){controlOver=true;});
addEventListener('mouseout',function(){controlOver=false;});
}
setTimeout(函数(){
var controls=map.getViewport().getElementsByClassName('ol-control');
对于(var i=0;i在侦听contextmenu事件时,我将画布替换为map.getViewport().getElementsByClassName('ol-OverlyContainer-stopevent')[0]
,但是在您的情况下,使用map.on('pointermove',…)可能更容易一些
并检查event.pixel
是否位于地图边缘。但这样,我无法通过悬停ol.control来检测光标是否离开。谢谢您的回答。随着时间的推移,添加或删除控件时,这会变得更加复杂。自OL6以来的另一个问题是,我在ol视口下的元素上没有任何事件。我有一个类似的问题覆盖有问题,但为了简单起见,这里没有包括。我在集合更新时添加了新的侦听器,该代码现在在示例中。您可能可以执行类似于新控件的操作,但我不确定如何获取独立控件的元素。