Яндекс-карты: как разделить события двойного клика от одинарного?

Добрый день.

Использую яндекс-карты, по клику на карту должны добавить метку, этим занимается функция "addPlacemark", если по метке кликнуть, то она должна исчезнуть. Если на карту кликнуть два раза(двойной клик), то метка не должна появится и сразу исчезнуть, надо чтоб был простой зум карты, как по-умолчанию.
Это рабочий код к чему я иду, но явно костыль какой-то. И метка появляется с тормозами.
var dblClick;

myMap.events.add('dblclick', function (e) { dblClick = true; });

myMap.events.add('click', function (e)
    {
    dblClick = false;

    setTimeout(function()
        {
        if(!dblClick)
            {
            addPlacemark(e.get('coords'));
            }
        }, 300);

    e.preventDefault();
    });


Может кто знает как правильно сделать? Спасибо.
  • Вопрос задан
  • 3024 просмотра
Решения вопроса 2
forgotten
@forgotten
Руководитель разработки API Яндекс.Карт
Это вопрос не к API Карт, а к браузеру (в смысле, точно такая же проблема возникнет, если вы захотите отличать клик от двойного клика на обычном DOM элементе). Ничего более умного, чем ждать n миллисекунд второй клик, в этом месте не придумано, к сожалению.
Ответ написан
Комментировать
@IceJOKER
Web/Android developer
stackoverflow.com/questions/6330431/jquery-bind-do... - вот отличное решение, вешаем событие на одиночный клик и там уже считаем сколько кликов было, оттуда в зависимости от кол. выполняем то или иное действие

Даже ваш костыль можно по-лучше сделать:

myMap.events.add('dblclick', function (e) { dblClick = true; });

myMap.events.add('click', function (e)
    {
    if(dblClick){
dblClick = false;
return;
}

    setTimeout(function()
        {
            addPlacemark(e.get('coords'));
        }, 300);

    e.preventDefault();
    });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы