Twitter bootstrap 从openlayers3检测鼠标悬停在popover上
我想从openlayers3地图中检测鼠标何时悬停在(引导)popover上,这样我可以在这种情况下保持popover打开,但在所有其他情况下将其销毁。我的地图有很多包含链接的弹出框功能,因此用户应该能够将鼠标移动到链接,并在弹出框仍然打开的情况下单击。在销毁事件上设置一个计时器真的很麻烦,因为我正在显示的弹出窗口具有各种不同的功能。我不确定最好的解决方案是通过openlayers(这可能吗?)还是通过引导来检测事件 下面是一个演示该问题的示例 只有当鼠标在府绸上时,保持府绸打开的最佳方法是什么 谢谢你的帮助Twitter bootstrap 从openlayers3检测鼠标悬停在popover上,twitter-bootstrap,popover,openlayers-3,onhover,Twitter Bootstrap,Popover,Openlayers 3,Onhover,我想从openlayers3地图中检测鼠标何时悬停在(引导)popover上,这样我可以在这种情况下保持popover打开,但在所有其他情况下将其销毁。我的地图有很多包含链接的弹出框功能,因此用户应该能够将鼠标移动到链接,并在弹出框仍然打开的情况下单击。在销毁事件上设置一个计时器真的很麻烦,因为我正在显示的弹出窗口具有各种不同的功能。我不确定最好的解决方案是通过openlayers(这可能吗?)还是通过引导来检测事件 下面是一个演示该问题的示例 只有当鼠标在府绸上时,保持府绸打开的最佳方法是什么
// define map
var map = new ol.Map({
target: "map",
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
zoom: 1,
center: ol.proj.transform([0,0], "EPSG:4326", "EPSG:3857"),
})
});
// define popup overlay
popup = new ol.Overlay({
element: document.getElementById("popup")
});
map.addOverlay(popup);
// define feature
var FeatureLayer = new ol.FeatureOverlay({
map: map,
features: [new ol.Feature({
geometry: new ol.geom.Circle([0,0], 1000000),
})]
})
// define mouse move event
$(map.getViewport()).on("mousemove", function(evt) {
var pixel = map.getEventPixel(evt.originalEvent);
var coordinate = map.getCoordinateFromPixel(pixel)
displayFeatureInfo(pixel, coordinate);
});
// popover display function
var feature_prev
function displayFeatureInfo(pixel, coordinate)
{
var feature = map.forEachFeatureAtPixel(pixel, function(feature, layer) {
return feature;
});
if (feature == feature_prev) // if same feature, leave popup open
{
return
}
// if (mouse hovering over open popover) <--------------------- how to detect this?
//{
// return
//}
// display popover
var element = popup.getElement();
if (feature) // if mouse is over feature
{
coords = ol.proj.transform([0,0], "EPSG:4326", "EPSG:3857"),
popup.setPosition(coords);
$(element).popover("destroy")
$(element).popover({
"html": true,
"content": "<a href='http://www.google.com'>Link 1</a><br>"+
"<a href='http://openlayers.org'>Link 2</a>"
});
$(element).popover("show");
feature_prev = feature
}
else
{
$(element).popover("destroy")
feature_prev = []
}
}
//定义映射
var map=新ol.map({
目标:“地图”,
图层:[
新ol.layer.Tile({
来源:new ol.source.OSM()
})
],
视图:新ol.view({
缩放:1,
中心:ol.proj.transform([0,0],“EPSG:4326”,“EPSG:3857”),
})
});
//定义弹出式覆盖
弹出=新ol.覆盖({
元素:document.getElementById(“弹出窗口”)
});
map.addOverlay(弹出窗口);
//定义特征
var FeatureLayer=新ol.FeatureOverlay({
地图:地图,
功能:[新ol.功能({
几何:新的几何圆([0,0],1000000),
})]
})
//定义鼠标移动事件
$(map.getViewport()).on(“mousemove”,函数(evt){
var pixel=map.getEventPixel(evt.originalEvent);
var坐标=map.getCoordinateFromPixel(像素)
displayFeatureInfo(像素、坐标);
});
//弹出显示功能
var特征值
功能显示功能信息(像素、坐标)
{
var feature=map.forEachFeatureAtPixel(像素,函数(特征,层){
返回特性;
});
if(feature==feature\u prev)//如果是同一个功能,请保持弹出窗口打开
{
返回
}
//如果(鼠标悬停在打开的popover上)如您所见,popover具有类
名称popover内容
,您可以检查鼠标事件的目标是否为popover,然后返回
以保持popover打开
使用这种方法,当您在弹出链接上悬停时,弹出链接将关闭。因此,我们必须附加条件来检查a
标记,以便在您悬停在弹出链接上时保持其打开
if (e.target.className == 'popover-content' || e.target.tagName.toLowerCase() === 'a') {
return;
}
这是你的作品