0

I'm trying to set a limit pixel before that ol3 consider a click event to move event with the code see bellow. I'm doing something wrong because with my code the map isn't draggable anymore.

  window.app   = {};
  app.Drag = function() {
    ol.interaction.Pointer.call(this, {
      handleDownEvent: app.Drag.prototype.handleDownEvent,
      handleUpEvent: app.Drag.prototype.handleUpEvent
    });
  }

  ol.inherits(app.Drag, ol.interaction.Pointer);
  app.Drag.prototype.handleDownEvent = function(evt) {
    app.toD=evt.pixel;
    console.log('Down');
    return true;
  };

  app.Drag.prototype.handleUpEvent = function(evt) {
    app.toU=evt.pixel;
    console.log('up');
    delta=Math.sqrt(Math.pow(Math.abs(app.toU[0]-app.toD[0]),2)+Math.pow(Math.abs(app.toU[1]-app.toD[1]),2))
    if (delta<10) {
      console.log('Click event');
      var event = document.createEvent("MouseEvents");
      event.initMouseEvent("click", true, true, window,0, app.toD[0], app.toD[1], app.toD[0], app.toD[1], false, false, false, false, 0, null);
      map.dispatchEvent(event.initMouseEvent);
    }
    console.log(delta);
  };

  map.getInteractions().extend([new app.Drag()])

Thanks in advance for your help.

Slayes
  • 395
  • 1
  • 5
  • 15

2 Answers2

1

I toke another way, good for me :

if(typeof limit=='undefined')limit=10;
map.on('pointerdown', function(evt){
  console.log('down')
  app.toD=evt.pixel;
})
map.on('pointerup', function(evt){
  app.toU=evt.pixel;
  console.log('up');
  delta=Math.sqrt(Math.pow(Math.abs(app.toU[0]-app.toD[0]),2)+Math.pow(Math.abs(app.toU[1]-app.toD[1]),2))
  if (delta<limit) {
    console.log('Click event');
    var event = document.createEvent("MouseEvents");
    var x= app.toD[0]+((app.toD[0]-app.toU[0])/2).toFixed(0);
    var y= app.toD[1]+((app.toD[1]-app.toU[1])/2).toFixed(0);
    event.initMouseEvent("click", true, true, window,0, x, y, x, y, false, false, false, false, 0, null);
    event.pixel = [x, y];
    map.dispatchEvent(event);
  }
  console.log(delta);
})
icyerasor
  • 4,973
  • 1
  • 43
  • 52
Slayes
  • 395
  • 1
  • 5
  • 15
  • Thanks for the Code @Slayes. With two minor modifications it did exactly what I was looking for (for an age old project :)). I edited your code snippet to reflect that and hope they are general correct modifications (adding the pixel property + dispatching the event instead of the event.initMouseEvent function). – icyerasor Sep 27 '21 at 17:21
0

Since OpenLayers 4.2.0, you can set moveTolerance as an option for ol.Map, which does exactly what you're asking for.

See ol.Map documentation.

icyerasor
  • 4,973
  • 1
  • 43
  • 52