Pointers OpenLayer 3:在覆盖上创建地图时,无法触发地图指针向上事件
我在OSM上创建了一个覆盖,并在覆盖上创建了一个矢量贴图(stopEvent=true),但当我在覆盖上拖动矢量贴图时,无法触发矢量贴图指针向上事件,因此导致即使鼠标单击矢量贴图,矢量贴图也始终跟随鼠标移动。但是,如果我在覆盖外单击OSM,将触发向量映射指针向上事件。是否是ol3错误?或者有没有其他方法来避免这个问题?谢谢 以下是该问题的示例代码:Pointers OpenLayer 3:在覆盖上创建地图时,无法触发地图指针向上事件,pointers,events,overlay,drag,openlayers-3,Pointers,Events,Overlay,Drag,Openlayers 3,我在OSM上创建了一个覆盖,并在覆盖上创建了一个矢量贴图(stopEvent=true),但当我在覆盖上拖动矢量贴图时,无法触发矢量贴图指针向上事件,因此导致即使鼠标单击矢量贴图,矢量贴图也始终跟随鼠标移动。但是,如果我在覆盖外单击OSM,将触发向量映射指针向上事件。是否是ol3错误?或者有没有其他方法来避免这个问题?谢谢 以下是该问题的示例代码: var geojsonObject = { "features": [ { "geometr
var geojsonObject = {
"features": [
{
"geometry": {
"coordinates": [
[
[
-7357522.593593802,
-1134936.9958202997
],
[
-7357522.593593802,
5361598.9112891
],
[
7435794.110546899,
5361598.9112891015
],
[
7435794.110546903,
-1134936.9958202997
],
[
-7357522.593593802,
-1134936.9958202997
]
]
],
"type": "Polygon"
},
"type": "Feature"
}
],
"type": "FeatureCollection"
};
//Create OSM
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
controls: [],
target: 'map',
view: new ol.View({
center: [0, 0],
zoom: 2
})
});
//Create overlay
var $element = $("<div id='vectorMap' class='vectorMap'></div>");
var vectorMap = new ol.Overlay({
element: $element[0],
position: [0, 0],
positioning: "center-center"
});
map.addOverlay(vectorMap);
//Create vector map on overlay
var vmap = new ol.Map({
target: "vectorMap",
layers: [
new ol.layer.Vector({
source: new ol.source.Vector({
features: (new ol.format.GeoJSON()).readFeatures(geojsonObject)
})
})
],
controls: [],
view: new ol.View({
center: [0, 0],
zoom: 1
})
});
//Listen the pointer event on vector map
vmap.on('pointerdown', function(evt) {
console.log("pointerdown");
});
vmap.on('pointerup', function(evt) {
console.log('pointerup');
});
var geojsonObject={
“特点”:[
{
“几何学”:{
“坐标”:[
[
[
-7357522.593593802,
-1134936.9958202997
],
[
-7357522.593593802,
5361598.9112891
],
[
7435794.110546899,
5361598.9112891015
],
[
7435794.110546903,
-1134936.9958202997
],
[
-7357522.593593802,
-1134936.9958202997
]
]
],
“类型”:“多边形”
},
“类型”:“特征”
}
],
“类型”:“功能集合”
};
//创建OSM
var map=新ol.map({
图层:[
新ol.layer.Tile({
来源:new ol.source.OSM()
})
],
控件:[],
目标:“地图”,
视图:新ol.view({
中间:[0,0],
缩放:2
})
});
//创建覆盖
变量$element=$(“”);
var vectorMap=新ol.覆盖({
元素:$element[0],
位置:[0,0],
定位:“居中”
});
map.addOverlay(矢量地图);
//在覆盖上创建矢量地图
var vmap=新的ol.Map({
目标:“矢量地图”,
图层:[
新ol.layer.Vector({
来源:新ol.source.Vector({
特性:(新的ol.format.GeoJSON()).readFeatures(geojsonObject)
})
})
],
控件:[],
视图:新ol.view({
中间:[0,0],
缩放:1
})
});
//侦听向量映射上的指针事件
vmap.on('pointerdown',函数(evt){
console.log(“pointerdown”);
});
vmap.on('pointerup',函数(evt){
log('pointerup');
});
jsIDLE:我通过禁用地图默认dragPan交互解决了问题,并在地图视口div元素上注册
mousedown/up/move
事件。请参阅ol3 dragPan交互源代码
下面是示例代码:
var vmap = new ol.Map({
target: "vectorMap",
layers: [
new ol.layer.Vector({
source: new ol.source.Vector({
features: (new ol.format.GeoJSON()).readFeatures(geojsonObject)
})
})
],
controls: [],
interactions: ol.interaction.defaults({
dragPan: false
}),
view: new ol.View({
center: [0, 0],
zoom: 1
})
});
//Register the dragpan event on the viewport div
var drag = false;
var lastCentroid = null;
$(vmap.getViewport()).on({
mousedown: function(evt) {
drag = true;
lastCentroid = null;
vmap.render();
},
mouseup: function(evt) {
drag = false;
vmap.render();
},
mousemove: function(evt) {
if (drag) {
var centroid = [evt.clientX, evt.clientY];
if (lastCentroid != null) {
var deltaX = lastCentroid[0] - centroid[0];
var deltaY = centroid[1] - lastCentroid[1];
var view = vmap.getView();
var viewState = view.getState();
var center = [deltaX, deltaY];
ol.coordinate.scale(center, viewState.resolution);
ol.coordinate.rotate(center, viewState.rotation);
ol.coordinate.add(center, viewState.center);
center = view.constrainCenter(center);
vmap.render();
view.setCenter(center);
}
lastCentroid = centroid;
}
},
mouseleave: function(evt) {
drag = false;
}
});
我也有同样的问题。我想知道这是出现在一些ol-3版本中还是从ol2到ol3?我们最近从ol2换成了ol3,问题就出现了。我只是想知道在没有修复ol3头部的情况下是否应该进行降级。使用缩小的ol.js文件,您无法找到
ol.coordinate.scale
,ol.coordinate.rotate
或ol.coordinate.add
。等效命令是什么?没有view.getState()
也没有,我使用了view.getResolution()
等。使用ol debug.js
所有这些都可以完美地工作。