Клуб API Карт

Эффект залипания

Пост в архиве.

Приветствую.

Имеется polyline, хочется, при наведении курсора мыши, рисовать на линии маркер. Т.е. в MouseEnter создаем и рисуем маркер на линии. В MouseMove перемещаем маркер по линии. В MouseLeave убираем маркер. Но, хочется рисовать маркер раньше, чем возникнет MouseEnter и удалять позже, чем MouseLeave, как в маршрутах Яндекса.

12 комментариев
В Яндекс.маршрутах реализована ровно такая логика, как описано у вас.
Не верю.
Да, действительно, наверное нужно две линии делать. Только вот у меня проблема возникла с потерей фокуса линией.
А зачем вам добавлять метку чуть раньше и удалять чуть позже?

Вы можете подложить под маршрут прозрачную ломаную с большей толщиной и слушать события на ней. Это даст вам возможность чуть раньше добавлять и чуть позже удалять метку. Но нужно ли? Азат подтвердил, что ваши мысли верные и на картах маршруты работают точно так же.
Да, я думал насчет второй линии.
Гм, вот какая проблема, при событии MouseEnter, я создаю маркер и показываю его, но после этого линия теряет фокус и возникает событие MouseLeave, которое скрывает маркер. Из-за этого при перемещении мыши маркер постоянно мелькает, как от этого избавиться?
Слушать MouseLeave на маркере.
Точно, всплытие, спасибо. :)
Все равно не понял, как мне это поможет. До MouseLeave маркера дело не доходит, потому что MouseLeave polyline его скрывает.
Очевидно, MouseStart нужно слушать на ломаной, а MouseMove и MouseLeave на маркере.
Но тогда маркер можно будет утащить за пределы ломаной. Или я чего-то не понял. Таже проблема у меня.
Подскажите пожалуйста какие события обрабатывать что бы получить данный эфект?
1. MouseEnter на ломаной - создаём маркер - это очевидно без этого никуда.
2.1 MouseMove на ломаной - перемещаем маркер - но как уже говорилось, возникает мерцание маркера.
2.2 MouseMove на маркере - перемещаем маркер - без мерцания, но как результат маркер можно утянуть за пределы ломаной
3. MouseLeave - очень зависит от реализации MouseMove


Подскажите какие события слушать. Спасибо.