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
, которое начиналось за пределами карты, так что следующий контакт на карте не блокируется.