VEMap Pan запускает VEMap.onclick - PullRequest
2 голосов
/ 29 июля 2009

Я использую Virtual Earth (или Bing! ...) SDK и мне нужно прикрепить событие, когда кто-то нажимает на карту. К сожалению, панорамирование карты также вызывает событие onclick. Кто-нибудь знает о работе вокруг?

function GetMap(){
    map = new VEMap('dvMap');
    map.LoadMap(new VELatLong(35.576916524038616,-80.9410858154297), 11, 'h',false);
    mapIsInit = true;
    map.AttachEvent('onclick', MapClick);
}

function MapClick(e){
    var clickPnt = map.PixelToLatLong(new VEPixel(e.mapX,e.mapY));
    Message('Map X: ' + clickPnt.Longitude + '\nMap Y: ' + clickPnt.Latitude + '\nZoom: ' + e.zoomLevel);
}

Ответы [ 3 ]

1 голос
/ 26 ноября 2009

Я столкнулся с той же проблемой. Это, конечно, не то, что я ожидаю, событие щелчка в моей терминологии подразумевает, что расстояние между mouseDown и mouseUp ниже определенного порога.

Вот код, который работает в моих экспериментах:

<script type="text/javascript">
  var mouseDownLocation;
  var mouseClickThreshold = 5;

  function init()
  {
    var map = new VEMap('myMap');
    map.LoadMap(new VELatLong(-27.15,153),8,'r' ,false);
    map.AttachEvent("onmousedown", function(e) {
        var x = e.mapX;
        var y = e.mapY;
        mouseDownLocation = new VEPixel(x, y);
    });
    map.AttachEvent("onmouseup", function(e) {
        var x = e.mapX;
        var y = e.mapY;
        if(Math.abs(mouseDownLocation.x - x) + 
               Math.abs(mouseDownLocation.y - y) > mouseClickThreshold) {
            return;
        }
        pixel = new VEPixel(x, y);
        var LL = map.PixelToLatLong(pixel);
        document.getElementById("myMapInfo").innerHTML = 
               "Pixel X: " + x + " | Pixel Y: " + y + 
               "<br /> LatLong: " + LL + 
               "<br/>" + e.eventName;
    });
  }  
</script>

Сообщение будет отображаться только в том случае, если мышь не слишком много двигалась между событиями «вниз» и «вверх», т. Е. Обычное нажатие должно вызвать ее, перетаскивание не должно.

Это использует VE API в версии 6.2 и ожидает два div с идентификаторами "myMap" и "myMapInfo". Это также экспериментальный код, который можно улучшить, но общий подход кажется нормальным.

0 голосов
/ 24 сентября 2010

Спасибо, Питер, он отлично работает и с 6.3. Я открываю карты Bing и немного теряюсь в обработчиках событий, так что это помогло!

0 голосов
/ 30 июля 2009

Все зависит от того, что вы пытаетесь сделать. Вы можете проверить, какая кнопка мыши была нажата во время обработки события onclick. Например: если это была левая кнопка мыши, то ничего не делайте, в противном случае, если это правая кнопка мыши, сделайте свою логику, чтобы отобразить сообщение или нарисовать кнопку и т. Д.

Чтобы уточнить, только панорамирование карты с помощью мыши вызовет событие onclick. Если вы используете маленькие стрелки на панели навигации, это не вызовет событие onclick.

...