我想在Linux下运行的浏览器上使用OpenLayers 3 rotation interaction。这允许在按住Alt和Ctrl的同时通过拖动来旋转地图。这适用于Windows,但不适用于Redhat 6u2以及其他发行版,因为Alt键保留用于X-Windows拖动窗口行为。
首先,我使用ol.events.condition.shiftKeyOnly
自定义了DragRotate,但它与缩放框功能相冲突,即在旋转时绘制蓝色缩放框。
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})],
target: 'map',
view: new ol.View({
center: [-25860000, 4130000],
zoom: 10
}),
interactions: ol.interaction.defaults().extend([new ol.interaction.DragRotate({
condition: ol.events.condition.shiftKeyOnly
})])
});
我想保留缩放框的移位拖动并使用其他键/组合,也许是“R + Shift”?我试图定制条件。查看我的JSFiddle
var customCondition = function(mapBrowserEvent) {
return false; // TODO
};
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})],
target: 'map',
view: new ol.View({
center: [-25860000, 4130000],
zoom: 10
}),
interactions: ol.interaction.defaults().extend([new ol.interaction.DragRotate({
condition: customCondition
})])
});
我在API中找不到有关实现ol.events和MapBrowserEvent文档之外的自定义条件的任何内容。使用调试器我找不到结构中的任何属性或包含键码等的嵌套originalEvent。
答案 0 :(得分:2)
这是一个自定义条件 - Ctrl + Shift:
ol.events.condition.custom = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.originalEvent;
return (browserEvent.ctrlKey && browserEvent.shiftKey);
};
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})],
target: 'map',
view: new ol.View({
center: [-25860000, 4130000],
zoom: 10
}),
interactions: ol.interaction.defaults().extend([new ol.interaction.DragRotate({
condition: ol.events.condition.custom
})])
});