Обработка двойного тапа с задержкой на JavaScript
Обработка двойного тапа с задержкой на JavaScript
Обычно для обработки двойного клика на каком-нибудь элементе HTML-страницы используется событие ondblclick. Но у ondblclick есть большой недостаток: при задании обработчика нельзя устанавливать произвольный интервал между первым кликом (тапом на экране мобильного устройства) и последующим кликом. Кроме того, я встречал в интернетах информацию, что на некоторых мобильных устройствах событие ondblclick передается как два последовательных события одиночного нажатия onclick.
В результате недолгих размышлений появилась вот такая функция-обработчик события onclick, которая может обрабатывать как одиночное нажатие, так и двойное. При этом теперь можно задавать произвольный интервал срабатывания для каждого элемента DOM, к которому она прицепляется.
Code (JavaScript) : Убрать нумерацию
- //-------------------------------------------------------------------
- // Обработка одиночного и двойного тапов на элементе
- //-------------------------------------------------------------------
- // elem - элемент, от которого пришло событие onclick
- // single_tap_function - функция обработки одиночного нажатия
- // double_tap_function - функция обработки двойного нажатия
- // tap_delta_time - интервал ожидания (мс) между нажатиями
- //-------------------------------------------------------------------
- function hook_tap(elem, single_tap_function, double_tap_function,
- tap_delta_time) {
- if (elem.single_tap_timer==null) {
- // Первый клик или тап
- elem.single_tap_timer = setTimeout(
- single_tap_function,
- tap_delta_time
- );
- }
- else {
- // Второй клик или тап
- clearTimeout(elem.single_tap_timer);
- elem.single_tap_timer = null;
- double_tap_function();
- }
- return false;
- }
Code (HTML) : Убрать нумерацию
- <img src="button.png" onclick="
- return hook_tap(
- this,
- // Функция обработки одиночного клика/тапа
- function() {
- alert('single');
- },
- // Функция обработки двойного клика/тапа
- function() {
- alert('double');
- },
- // Пауза между нажатиями, мс
- 700
- );"
- />
Code (JavaScript) : Убрать нумерацию
- //-------------------------------------------------------------------
- // Обработка одиночного, двойного и тройного тапов на элементе
- //-------------------------------------------------------------------
- // elem - элемент, от которого пришло событие onclick
- // single_tap_function - функция обработки одиночного нажатия
- // double_tap_function - функция обработки двойного нажатия
- // triple_tap_function - функция обработки тройного нажатия
- // tap_delta_time - интервал ожидания (мс) между нажатиями
- //-------------------------------------------------------------------
- function hook_tap(elem, single_tap_function, double_tap_function,
- triple_tap_function, tap_delta_time) {
- if (elem.single_tap_timer==null && elem.double_tap_timer==null) {
- // Первый клик или тап
- elem.single_tap_timer = setTimeout(
- function() {
- elem.single_tap_timer=null;
- elem.double_tap_timer=null;
- single_tap_function();
- },
- tap_delta_time
- );
- }
- else if (elem.double_tap_timer==null) {
- // Второй клик или тап
- elem.double_tap_timer = setTimeout(
- function() {
- elem.single_tap_timer=null;
- elem.double_tap_timer=null;
- double_tap_function();
- },
- tap_delta_time
- );
- clearTimeout(elem.single_tap_timer);
- elem.single_tap_timer = null;
- }
- else {
- // Третий клик или тап
- clearTimeout(elem.single_tap_timer);
- elem.single_tap_timer = null;
- clearTimeout(elem.double_tap_timer);
- elem.double_tap_timer = null;
- triple_tap_function();
- }
- return false;
- }
Code (HTML) : Убрать нумерацию
- <img src="button.jpg" onclick="
- return hook_tap(
- this,
- // Функция обработки одиночного клика/тапа
- function() {
- alert('single');
- },
- // Функция обработки двойного клика/тапа
- function() {
- alert('double');
- },
- // Функция обработки тройного клика/тапа
- function() {
- alert('triple');
- },
- // Пауза между нажатиями, мс
- 500
- );"
- />
Просмотров: 4080 | Комментариев: 0
Метки: JavaScript
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария