【问题标题】:Howto finish freehand drawing in Openlayers on mouse release如何在鼠标释放时在 Openlayers 中完成手绘
【发布时间】:2015-11-25 23:13:25
【问题描述】:

我想在释放鼠标按钮而不是双击时完成绘图。我怎样才能做到这一点?

现在我默认使用此代码在 Openlayers drawing feature 上激活手绘:

draw = new ol.interaction.Draw({
  source: drawLayerSource,
  type: 'LineString',
  condition: ol.events.condition.singleClick,
  freehandCondition: ol.events.condition.noModifierKeys
});
map.addInteraction(draw);

但我不知道如何避免双击完成线串并改用鼠标释放。

【问题讨论】:

    标签: javascript draw openlayers-3


    【解决方案1】:

    更新 - https://jsfiddle.net/jonataswalker/frwfuzzn/

    为了同时启用手绘和直线,我正在使用此函数计算绘图开始和指针向上之间的经过时间:

    var isStraightLine = function(){
      var now = new Date();
      // `start_time` was set at the drawing beginning
      var diff = now - start_time;
      // strip the ms
      diff /= 1000;
      already_checked = true;
      // an average time I found here
      // not sure if this is completely reliable
      return diff < 0.07;
    };
    

    如果我发现这是draw.finishDrawing() 的手绘完成。为了理解,最好检查代码。


    我可以,但前提是您保持 freehandCondition 默认条件 - ol.events.condition.shiftKeyOnly

    ol.Map 上收听pointerup,如果您正在绘画,请以ol.interaction.Draw#finishDrawing 结束。

    var start_drawing = false;
    var draw = new ol.interaction.Draw({
      source: vectorSource,
      type: 'LineString',
      condition: ol.events.condition.singleClick
    });
    map.addInteraction(draw);
    
    draw.on('drawstart', function(evt){
      start_drawing = true;
    });
    draw.on('drawend', function(evt){
      start_drawing = false;
    });
    map.on('pointerup', function(evt){
      if(start_drawing) {
        draw.finishDrawing();
      }
    });
    

    http://jsfiddle.net/jonataswalker/ewv0mo3c/

    【讨论】:

    • 实际上它也适用于freehandCondition noModifierKeys,但你必须删除地图dragPan:jsfiddle.net/geraldo/tfcy010q/1
    • 现在唯一的改进是使工作也能画直线。正如您在 jsfiddle 中看到的那样,当您单击时 line 开始但由于 drawend 立即被调用而没有完成。问题是我不知道如何区分不同位置的 mousedown 和 mouseup。
    • 直线将如何完成?标准dblclick?
    • 正如您在 jsfiddle 中看到的那样,dblclick 没有完成它,因为它首先检测到 pointerup 并将 start_drawing 设置为 false。
    • 好吧,我没有解释自己:我想保持画直线的可能性。在您的小提琴中,单击即可开始绘制线条,但在第二次单击时将其删除。我想在第二次单击时完成它(意味着将其显示为已绘制)。
    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 2014-10-15
    • 2011-10-08
    相关资源
    最近更新 更多