События двойного щелчка не запускаются

1

Наличие некоторых проблем с событиями двойного щелчка в JavaScript.

Я хочу иметь возможность быстро нажимать на элемент, но слушать двойные щелчки. Является ли это технически возможным или мне нужно иметь один клик и слушать, когда его дважды щелкнули?

Codepen пример здесь.

JS также можно найти ниже.

(function() {

  var el;
  var count = 0;
  var counter;

  function init() {
    el = document.getElementById('click-me');
    counter = document.getElementById('counter');

    el.addEventListener('dblclick', onDblClick, false);
  }

  function onDblClick(e) {
    count++;
    counter.textContent = count;
  }

  init();

}());

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

Есть ли что-то, что мне не хватает в самом событии dblclick, или это то, что я пытаюсь сделать невозможным?

PS Это нужно только для работы в Webkit/Chrome, поскольку это не для веб-сайта, а для наложения на игру.

  • 0
    Я могу злобно щелкнуть по твоему коду, и он продолжает увеличиваться. Ваша проблема в конкретном браузере / устройстве / методе ввода?
  • 0
    @Fenton Несмотря на то, что он работает, он иногда дает сбой (занимает 3 двойных клика), работает на Chrome 61.
Показать ещё 3 комментария
Теги:
event-listener
double-click

1 ответ

2
Лучший ответ

Что-то вроде этого (https://gist.github.com/karbassi/639453):

(function() {

  var el;
  var count = 0;
  var counter;
  var clickCount = 0;

  function init() {
    el = document.getElementById('click-me');
    counter = document.getElementById('counter');

    el.addEventListener('click', onDblClick, false);
  }

  function onDblClick(e) {

    clickCount++;
    if (clickCount === 1) {
        singleClickTimer = setTimeout(function() {
            clickCount = 0;            
        }, 400);
    } else if (clickCount === 2) {
        count++;
        clearTimeout(singleClickTimer);
        clickCount = 0;
        counter.textContent = count;
    }
}
  init();

}());
  • 0
    Спасибо! Похоже, это лучшее решение. dblclick выглядит не очень согласованным в движке Webkit, который я использую.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню