Клуб API Карт

замена клика на наведение

mihakot
23 ноября 2010, 23:25
Возможно ли как то изменить что бы балун открывался не по клику на метке а при фокусе курсора на ней?
17 комментариев
Подписаться на комментарии к посту
можно конечно считать что no-click это конечно модно, но в стандартном варианте ЯК это может быть не очень удобно, если честно. 

делается в две команды, хотя лучше в три
при наведении на маркер запускаем таймер
при отведении - останавливаем его( и запускаем новый на закрытие балуна? )
далее при старте таймера надо попросить маркер открыт балун.
Если коротко -

YMaps.Events.observe(somemarker, this.api.Events.MouseEnter   ,function(){ //что-то и когда-то, не советую сразу при наведении 
somemarker.openBallon(); });



 детали зависят от вашего вкуса, посему не привожу
то что это не можно я понимаю. но заказчик очень хочет, аж ногами сучит.

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

я не силен в этом апи.
я полдня разбирался как сменить вид балуна.)

YMaps.Events.observe(somemarker, this.api.Events.MouseEnter   ,function(){
функция в хвосте будет вызвана при mouseenter на балун.
Далее в ней обычный setTimeout(на секунду другую) и somemarker.openBallon();

на YMaps.Events.observe(somemarker, this.api.Events.MouseLeave вешаем тоже самое, только уже с закрытием балуна
somemarker - это что?
Объект, на котором возникает событие. мне надо на всех маркерах.
и где этот код прописать?
в определении балуна? или выше ?
somemarker - это Placemark
Если уж наводить надо на него - то и ивенты вешаем - тоже на него :)

в данном случае вам потребуется прописать это событие на каждый маркер лично, или на группу маркеров ежели такая имеется.
при желании все тоже самое можно сделать через jquery

Ежели ничего не понятно и разбираться в лом - выложите куданить ссылку( только не вставляйте код сюда) на скрипт - обработам его напильником.
примерно понял суть.
попробую сварганить.
Видимо не там сделал.
вообще маркеры не показываются.

что то не то наверно.

смотреть тут
моя вина - копипастил

(никакого new!) map.Events.observe(placemark, placemark.Events.MouseEnter и так далее..
рекомендую FireBug для ФФ, DragFly для оперы или обычный VisualStudio для IE
Помогает!
Ага. есть вроде. только вот проблема при наведении на любой маркер, показываются только первый обьект.
Сделал каждый маркер своим идом.
вроде работает, только теперь проблема в том что действует как раз наообррот.
сначала при наведении ничего, при отведении показывает, при наведении опять прячет.
проблема генетическая
проблем даже две.
1.после наведения балун покажется через секунду
2.при отведении - скроется сразуже..

1.наводим на маркер. ждем секунду - балун появляется. Маркер исчезает :) - балун тутже схлопывается

2.проводим мышкой над маркером. Запускается таймер и балун тутже закрывается(ага), чтобы через секунду отработал таймер и он открылся..

var someval=setTimeout
clearTimeout(someval) - "выключает" таймер

самый простой вариант - при уводе мышки - убивается таймер открытия балуна, при наводе - закрытия(друг друга)..
при уводе - можно вообще балун не закрывать( и наче прийдется вешаться еще "мышка над балуном, чтобы можно было с ним работать)...

в общем начинается все самое интересное
вариант такой что бы маркер не прятался.
по идее должен работать. только как сделать чтобы он не прятался?
 
самый простой вариант - при уводе мышки - убивается таймер открытия балуна, при наводе - закрытия(друг друга)..
при  уводе - можно вообще балун не закрывать( и наче прийдется вешаться еще  "мышка над балуном, чтобы можно было с ним работать)...

в общем начинается все самое интересное

это да. похоже на то.
а вариант такой что бы при наведении показывался,  и при отводе не прятался, до тех пор пока не будет фокус на другом маркере.

такое возможно?
как только вы откроете новый балун - этот закроется.
на карте без доп телодвижений может быть только один балун
ну это образно - может быть один балун одного назначения
ну да. собственно это и надо. чтобы был открыт тот который последний был в фокусе.
просто как это сделать?
сотрите обработник MouseLeave - просто не закрывайте его автоматически сами
спасибо! огромное.