2013-09-06 2 views
2

Я разрабатываю веб-приложение, которое использует Bing maps 7.0. Мне было интересно, есть ли способ привязать функцию к событию класса карты, который слушает, когда карта либо перетаскивается, либо увеличено. Из того, что я вижу в документации, событие viewchangeend для класса Map близко к тому, что я ищу, однако это событие вызывается в ситуациях, которые я особо не хочу учитывать, например, если я спрячу карту содержащий div с использованием jQuery или создания/инициализации карты. В идеале, мне также хотелось бы, чтобы это было дросселированное событие, когда функция обработчика вызывается через определенное время. Любая идея о том, как это можно реализовать? Заранее спасибо.Как реализовать функции масштабирования и перетаскивания в Bing Maps 7.0?

Update

Как было предложено psousa, я использовал это событие viewchangeend.

Это хак вокруг, который я пытался реализовать, чтобы попытаться определить, была ли карта увеличена или перетащена. Я все еще привязываю обработчик к событию viewplaceend, но на этот раз я проверяю, изменились ли координаты северо-запада или юго-восточные координаты карты.

var map; // contains Microsoft.Maps.Map instance 
var nw; // contains the NW Microsoft.Maps.LocationRect instance 
var se; // contains the SE Microsoft.Maps.LocationRect instance 

// initialization code goes here some where 

Microsoft.Maps.Events.addThrottledHandler(map, "viewchangeend", function(arg) { 

    var curNW = map.getBounds().getNorthwest(); 
    var curSE = map.getBounds().getSoutheast(); 

    if (nw.latitude != curNW.latitude || 
    nw.longitude != curNW.longitude || 
    se.latitude != curSE.latitude || 
    se.longitude != curSE.longitude) 
    { 
     nw = curNW; 
     se = curSE; 

     // Execute actual handler code here 
    } 
}, 1000); 

Этот код не работает должным образом. Когда я отлаживаю код, если я схожу и скрываю содержащий div div (используя jQuery), я замечаю, что curNW и curSE не имеют тех же координат, что и те, которые я сохранил при предыдущем вызове. Почему это, если я никогда не перетаскивал карту или не увеличивал или уменьшал масштаб? Я просто скрываю карту, почему изменились координаты карты? Это не имеет никакого смысла для меня. В идеале я хотел бы Bing карты предоставить разработчикам zoomend или dragend события, так что я могу сказать:

Microsoft.Maps.Map.addThrottledHandler(map, "zoomend", handler, 1000); 
Microsoft.Maps.Map.addThrottledHandler(map, "dragend", handler, 1000); 

Google Maps я считаю, обеспечивает эту функциональность. Если кто-то знает лучший способ проверить эти события, пожалуйста, дайте мне знать. Я не хочу добавлять дополнительные обработчики к элементам страницы, которые могут вызвать viewchangeend, так как на этой странице есть много вещей, которые происходят на этой странице. Цените помощь.

ответ

0

viewchangeend и viewchange являются лучшими событиями для этого, поэтому нет отличной альтернативы.

В любом случае, у вас есть готовая поддержка дросселированных событий. Таким образом, вместо того, чтобы:

Microsoft.Maps.Events.addHandler(map, 'viewchangeend', handler); 

вы можете просто использовать (последний аргумент использует миллисекунды):

Microsoft.Maps.Events.addThrottledHandler(map, 'viewchangeend', handler, 500); 

Ссылка: http://msdn.microsoft.com/en-us/library/gg427623.aspx

+0

Цените быстрый ответ :-). Я попытался привязать обработчик к «viewchangeend» так же, как вы описали, но, к сожалению, у меня есть ситуации, когда мне нужно скрыть карту и не хочу, чтобы вызвал обработчик события. Страница, на которой я его использую, содержит вкладки и две кнопки, которые будут отображать и скрывать содержащийся в карте div. В каждой из этих ситуаций обработчик получает вызов, которого я не хочу. Я надеялся, что класс Map будет учитывать «увеличенные» и «перетаскиваемые» события, такие как карты Google. Это может потребовать взлома, если я буду придерживаться Bing. Спасибо за ответ. – kruiz

Смежные вопросы