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