Fastclick.js вызывает игнорирование кликов Leaflet.js

Я разрабатываю приложение Кордовы, в основе которого лежит карта, построенная с помощью Leafletjs. На карте есть маркеры, которые при нажатии отображают информационное окно.

Я хочу избавиться от задержки 300 мс на ссылках вокруг сайта в целом - в основном на всех якорях (тегах). Мне не нужно применять его к маркерам Leafletjs, потому что в настоящее время нет задержки, когда пользователь удаляет маркер.

Я установил fastclick (https://github.com/ftlabs/fastclick/) - он удалил задержку с тегов блестяще - однако это создало проблемы на маркерах Leafletjs которым теперь иногда нужно два огня.

Я попытался добавить класс "needclick" на маркеры Leafletjs, которые, согласно документации fastclick, должны заставить Fastclick игнорировать их, однако это, похоже, не влияет. (Пример:)

$('.leaflet-marker-icon').addClass('needsclick');
$(function() {
    FastClick.attach(document.body);
});

Поскольку метки clickersjs-маркеров на IMG, а не на теги, если я могу прикрепить Fastclick только к тегам, я думаю, что это исправит мою проблему, однако я попытался передать теги в качестве слоя Fastclick, но это не означает, т. (Пример:)

$(function() {
    var Anchors = document.getElementsByTagName("a");
    FastClick.attach(Anchors);
});

Ниже приведен минимальный jsfiddle, демонстрирующий поведение (требуется iDevice): https://jsfiddle.net/y723oet0/2/

Если у кого-нибудь есть какие-либо советы, это будет оценено.

Ответ 1

fastclick.js хранит внутреннюю переменную с именем this.targetElement, которая отслеживает элемент, который вы сейчас используете. Когда срабатывает событие touchend, fastclick.js проверяет, не находится ли элемент, который закончил касание, тем же самым, что и элемент, на котором началось касание.

При обычных новых кликах на карте this.targetElement начинается с нуля, и все работает правильно. Если элемент быстро постукивается, то this.targetElement = <a> и застревает в этом состоянии, что приводит к тому, что внутренняя функция fastclick.js onMouse отклоняет следующий щелчок карты.

Мы работали над этим, изменяя fastclick.js следующим образом:

diff --git a/fastclick.js b/fastclick.js
--- a/fastclick.js
+++ b/fastclick.js
@@ -606,6 +606,8 @@
                        this.sendClick(targetElement, event);
                }

+               this.targetElement = null;
+
                return false;
        };

// end of patch - don't copy this line

Этот патч вызывает очистку переменной this.targetElement в событии touchend, которое начиналось за пределами карты, так что следующий контакт на карте не блокируется.