Карта Bing AJAX Control V7 - Как можно обнаружить щелчки, а не перетаскивание? - PullRequest
0 голосов
/ 30 августа 2011

У меня есть карта Bing на моей веб-странице, и я хочу определить, когда пользователь нажимает в окне. Однако я не хочу определять, когда пользователь перетаскивает карту (это также генерирует событие «щелчка»). Как лучше всего получать только «чистые» события кликов?

Ответы [ 2 ]

3 голосов
/ 31 августа 2011

Мое решение закончилось тем, что я проверил вручную, была ли позиция щелчка близка к позиции, где была нажата мышь.

Microsoft.Maps.Events.addHandler(map, "click", clickHandler);
Microsoft.Maps.Events.addHandler(map, "mousedown", function(me) { lastMouseDownPoint = new Microsoft.Maps.Point(me.getX(), me.getY());});


function clickHandler(mouseEventArgs){
  var point = new Microsoft.Maps.Point(mouseEventArgs.getX(), mouseEventArgs.getY());

  //Drag detection

  // Edited since the comma is incorrect, should be a plus as per pythagorean theorem
  var dist = Math.sqrt(Math.pow(point.x-lastMouseDownPoint.x,2) + Math.pow(point.y-lastMouseDownPoint.y,2));
  if(dist > 5) {
    // We call this a drag
    return;
  }

// We have a "pure" click and can process it

}
1 голос
/ 01 июля 2014

Очень просто:

Microsoft.Maps.Events.addHandler(map, 'click', onClick);

function onClick(e) {
    if (e.mouseMoved === false && e.isPrimary === true) {
        // Left click not being a drag
        ...
    }
}

mouseMoved имеет значение true с перетаскиванием и false в противном случае.

Документация MouseEventArgs http://msdn.microsoft.com/en-us/library/gg406731.aspx не ссылается на mouseMoved: /

...