OL3 - 如何知道绘图或交互是否已启动

时间:2015-11-18 15:02:13

标签: javascript openlayers-3

在OpenLayer 3中,我使用'draw-feature' sample code they have on their website创建了一个Draw交互。

唯一的区别是我为Draw构造函数提供了自己的条件函数。

我想知道是否有办法在条件函数中确定交互/绘图是否已经开始?

基本上我的目标是略微改变行为,因此使用CTRL单击而不是单击来启动绘制框。但是只需点击一下就可以完成绘图。所以我的方法就是这样(在TypeScript中)

var condition = (e: ol.MapBrowserEvent): boolean => {
    return (myDraw.isStarted() ? true : e.originalEvent['ctrlKey']);
}

据我所知,在OL Draw类中没有像isStarted()方法那样的东西。如果我有权访问内部成员,我会通过检查myDraw.sketchCoords_的长度来解决它(没有检查过这个但是如果0还没有启动绘图)。但我不想依赖私人成员,而且我正在使用缩小版本的OL,其中成员名称被转换。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

var start_drawing = false;
function drawCondition(evt){
    var ctrl = ol.events.condition.platformModifierKeyOnly(evt);
    // this should be ol.events.condition.click
    // but for some reason always returns false
    var click = evt.type == 'pointerdown';

    // to finish draw with click
    if(start_drawing) return click;
    // start drawing only with Ctrl + click    
    return ctrl && click;
}
// draw is a reference to ol.interaction.Draw
draw.on('drawstart', function(evt){
    start_drawing = true;
});

draw.on('drawend', function(evt){
    start_drawing = false;
});