VEMap Pan запускает VEMap.onclick
Я использую 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 ответа
Я сталкиваюсь с той же проблемой. Это, конечно, не то, что я ожидаю, событие щелчка в моей терминологии подразумевает, что расстояние между 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". Это также код, который является экспериментальным и может быть улучшен, но общий подход кажется нормальным.
Все зависит от того, что вы пытаетесь сделать. Вы можете проверить, какая кнопка мыши была нажата во время обработки события onclick. Например: если это была левая кнопка мыши, то ничего не делайте, в противном случае, если это правая кнопка мыши, сделайте свою логику, чтобы отобразить сообщение или нарисовать канцелярскую кнопку и т. Д.
Чтобы уточнить, только панорамирование карты с помощью мыши вызовет событие onclick. Если вы используете маленькие стрелки на панели навигации, это не вызовет событие onclick.
Спасибо, Питер, он отлично работает и с 6.3. Я открываю карты Bing и немного теряюсь в обработчиках событий, так что это помогло!