@id1cc

Как отловить длинный клик?

Здравствуйте.

Хотелось бы узнать, каким образом можно отловить длинный клик (как мышкой, так и на тач-устройствах) на элементе?
Идея событий элемента такова: обычный клик - определенное действие, длинный клик - выпадающее меню.

Заранее спасибо за помощь.
  • Вопрос задан
  • 4811 просмотров
Пригласить эксперта
Ответы на вопрос 2
@fetis26
Ну, за фронтенд!
для jQuery
.mousedown( засекаете время )
.mouseup( смотрите сколько прошло. оцениваете является ли длинным кликом)
Ответ написан
nalomenko
@nalomenko
Руководитель отдела разработок в студии «Lava»
Думаю, нужно определять не длинный клик, а короткий (идём от противного). А вместо понятия «длинный клик» ввести термин «удержание», т. к. меню должно появиться, например, через 1000 миллисекунд после того, как кнопка мыши нажата (и не важно, была ли она уже отпущена).

Поэтому предполагаемый алгоритм такой:
var timer_id = 0; //глобальная переменная, хранящая ID таймера
var menu = false; //переменная, хранящая информацию о том, отработал ли длинный клик

//При нажатии кнопки мыши инициилизируем таймер с задержкой 1000 мс
$("#object_id").mousedown(function(){ timer_id = setTimeout('showMenu()', 1000) });

//При отпускании кнопки мыши отменяем таймер и выполняем действие быстрого клика (если длинный клик не отработал)
$("#object_id").mouseup(function(){ clearTimeout(timer_id); if(!menu) fastClick(); });

//Функция, которая показывает меню
function showMenu() 
{ 
   menu = true;
}

//Функция, которая отрабатывает при коротком клике
function fastClick()
{
}
Ответ написан
Ваш ответ на вопрос

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

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