Клуб API Карт

типы событий YMaps.Events

DevSumy
24 ноября 2008, 12:50

Где можно узнать полный список ТИПОВ событий для объекта YMaps.Events? в документации есть только Click, нужно чтобы была реакция на Drag/DragEnd.

методом пробы нашел только map.Events.Move но для моей задачи не подходит.

17 комментариев
Подписаться на комментарии к посту
Класс YMaps.Events является статическим. Он дает возможность добавлять обработчики событий к объектам JavaScript API. В Справочнике по программному интерфейсу представлен список событий для карты, меток, линий, ломанных, балуна, геокодера и т.д.
спасибо за ответ. Но меня интересовало имеено событие для карты dragEnd, т.е. не когда карта перемещаеться (при открытии балуна к примеру), а когда юзер ее сам мышкой перемещает. Можно воспользоваться MoveEnd, но я не знаю как можно отловить случай, когда карта перемещаетсья сама(если балун не помещаетсья в контейнере)
А в чем собственно проблема? Решение в лоб следующее: по событию MouseUp ставишь флаг какой-нить, а потом в обработчике события MoveEnd его проверяешь (события мыши MouseUp срабатывает раньше, чем MoveEnd - проверил опытным путем :). Типа такого: var flag_user_move = false; YMaps.Events.observe(map, map.Events.MoveEnd, function () { if (flag_user_move) { alert('user_move'); flag_user_move = false; } else { alert('auto_move'); } }) YMaps.Events.observe(map, map.Events.MouseUp, function () { flag_user_move = true; }) Это решение, возможно, не самое лучшее. Но работает =))) Если придумаешь лучше, то запости - мб кому-нибудь пригодится.
к сожалению это не всегда работает, хотя по логике все верно.
А что ты хочешь сделать?
мне надо чтобы после перемещения карты обновлялся список объектов на карте, но если юзер просматривает объект, и карта сама двигается, чтобы показат полностью балун, то события быть не должно (в гуглмапс это событие dragend). Отколючение перемещения карты при открытии балуна не катит :(
Представь такой вариант: ты открыл балун, карта переместилась и стали доступны новые данные, а ты будешь ждать когда пользователь сам будет таскать мышь, пользователь же не будет понимать почему данные не отобразились. В каких случаях не работает решение, которое я предложил?
эту тему можно долго обсуждать. на хабре была схожая проблема. одним словом такое недопустимо (не могу дать пока ссылку, было бы понятно почему)
ну если ты будешь молчать и говорить "у меня не работает", то логично, что мы можем долго обсуждать и ни к чему не придти. а если ты дашь кусок кода и ткнешь в строку из-за чего не работает или просто на словах нормально объяснишь, то я думаю найдем решение (ну это же в твоих интересах) не верь всему что пишут на хабре ;)
при чем тут верь-не верь - повторяться нехочу. Вариант когда срабатывает событие move не подходит, т.к. слишком часто идут запросы к серверу, карта перерисовыаетсья - лишние ресурсы уходят, если кратко. Потестил "заглушку" более тщательно работает, только иногда происходит вместо события move событие псевдо-"drag" - думал что я нажимаю на маркер, протягивая мышью, но проблема не в этом. Пока на уровне апи не будет реализовано событие dragend надо как то выкручиваться. Пока есть только идея вместе с заглушкой исопользовать минимальное расстояние перемещения карты(т.е. если было слабое смещение карты - то игнорировать событие). надо почитать апи и сделать, если у кого есть готовое, поделитесь:)
А в каком случае вы хотите, чтобы шли запросы к вашему серверу? В решении, которое предложил hevil, вы можете отсылать запросы к серверу только, когда установлен флаг flag_user_move = true. Если бы было событие DragEnd, то насколько бы сократилось количество запросов по вашему мнению? В чем было бы преимущество?
Если есть приявзка к перемещению карты, то кол-во событий сократилось бы на кол-во "произвольных" перемещениях карты, которые происходят не по воле пользователя. Можно конечно отключить опцию mapAutoPan, чтобы карта не сдвигалась, но это неудобно. Преимущество было бы в гибоксти для разработчиков, т.е. было бы доступно отслеживать перемещение карты, включая "произвольное", и премещение, инициированое пользовтелем с помощью мышки
решени hevil не всегда работает, не могу понять почему, ведь логика правильная. поставил дополнительную заглушку, при октрытиии балуна, помогло. YMaps.Events.observe(placemark, placemark.Events.BalloonOpen, function(mEvent) { flag_user_move = false; }); Если будет время, попроую разобраться в проблеме более детально. спасибо всем за помощь!
Всегда пожалуйста! Ждем презентацию вашего творения в клубе ;)
Спасибо, это то что я искал.
есть возможность создать свое событие для карты? чтобы событие реагоировало только на перемещение карты юзером, а не когда карта перемещается сама(например при открытии балуна)?
Пользовательское событие можно создать, воспользовавшись методом YMaps.Events.notify. С помощью этого метода вы сможете инициировать свое событие в любой момент. Всю логику работы вам придется продумать самостоятельно.