Interaction 是用来控制地图的。没看错它和控件一样的作用。不过它们的区别是控件触发都是一些可见的 HTML元素触发,如按钮、链接等;交互功能都是一些设备行为触发,都是不可见的,如鼠标双击、滚轮滑动,手机设备的手指缩放等。
Interaction,是一个虚基类,不负责实例化,交互功能都继承该基类。
doubleclickzoom ,双击地图进行缩放;
draganddrop ,以“拖文件到地图中”的交互添加图层;
dragbox,拉框,用于划定一个矩形范围,常用于放大地图;
dragpan ,拖拽平移地图;
dragrotateandzoom,拖拽方式进行缩放和旋转地图;
dragrotate ,拖拽方式旋转地图;
dragzoom ,拖拽方式缩放地图;
draw,绘制地理要素功能;
keyboardpan ,键盘方式平移地图;
keyboardzoom ,键盘方式缩放地图;
select,选择要素功能;
modify ,更改要素;
mousewheelzoom ,鼠标滚轮缩放功能;
pinchrotate,手指旋转地图,针对触摸屏;
pinchzoom ,手指进行缩放,针对触摸屏;
pointer ,鼠标的用户自定义事件基类;
snap,鼠标捕捉,当鼠标距离某个要素一定距离之内,自动吸附到要素。
默认的交互功能,包含多个交互。规定了默认包含在地图中的功能,他们都是继承自 ol.interaction 类。 主要是最为常用的功能,如缩放、平移和旋转地图等。
DragRotate,鼠标拖拽旋转,一般配合一个键盘按键辅助。
DragZoom,鼠标拖拽缩放,一般配合一个键盘按键辅助。
DoubleClickZoom,鼠标或手指双击缩放地图。
PinchRotate,两个手指旋转地图,针对触摸屏。
PinchZoom,两个手指缩放地图,针对触摸屏。
DragPan,鼠标或手指拖拽平移地图。
KeyboardZoom,使用键盘 + 和 - 按键进行缩放。
KeyboardPan,使用键盘方向键平移地图。
MouseWheelZoom,鼠标滚轮缩放地图。
通过map构造参数interactions传入,不传值默认defaults中的交互。
需要在默认交互基础上继续添加交互,可以使用ol.interaction.defaults().extend([new ol.control.Draw()]) 方法传入。
也可以利用map对象的addInteraction()方法在地图上添加Interaction对象。
var source = new ol.source.Vector()
var draw = new ol.interaction.Draw({
source: source,
type: 'Polygon',
style: new ol.style.Style({
fill: new ol.style.Fill({
color: 'rgba(255, 255, 255, 1)'
}),
stroke: new ol.style.Stroke({
color: '#ffcc33',
width: 2
}),
image: new ol.style.Circle({
radius: 7,
fill: new ol.style.Fill({
color: '#ffcc33'
})
})
})
})
map.addInteraction(draw)
map.addInteraction(new ol.interaction.DragRotateAndZoom())
var pointer = new ol.interaction.Pointer({
handleDownEvent: (e) => {
console.log('按下', e.type)
return true
},
handleDragEvent: (e) => {
console.log('拖拽移动', e.type)
},
handleUpEvent: (e) => {
console.log('拖拽抬起', e.type)
}
})
map.addInteraction(pointer)