首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fastclick.js导致Leaflet.js点击被忽略

Fastclick.js导致Leaflet.js点击被忽略
EN

Stack Overflow用户
提问于 2015-01-29 00:54:40
回答 1查看 399关注 0票数 10

我正在开发一个Cordova应用程序,其中有一个与Leafletjs在它的核心构建的地图。地图上有标记,当点击时会弹出一个信息框。

我想摆脱300毫秒的延迟在网站周围的链接一般-基本上在所有的锚(一个标签)。我不需要将其应用于Leafletjs标记,因为当前用户点击标记时没有延迟。

我已经安装了fastclick (https://github.com/ftlabs/fastclick/) -它很好地消除了a标签的延迟-但是它在Leafletjs标记上产生了问题,现在有时需要两个cicks才能触发。

我已经尝试在Leafletjs创建的标记上添加'needsclick‘类,根据快速单击文档,它应该使fastclick忽略它们--但是它似乎没有任何影响。(示例:)

代码语言:javascript
运行
复制
$('.leaflet-marker-icon').addClass('needsclick');
$(function() {
    FastClick.attach(document.body);
});

因为leafletjs标记点击事件是在img上而不是a标签上的,如果我可以将Fastclick附加到a标签上,我认为这可以解决我的问题,但是我已经尝试将标签作为层传递给Fastclick,但这也不起作用。(示例:)

代码语言:javascript
运行
复制
$(function() {
    var Anchors = document.getElementsByTagName("a");
    FastClick.attach(Anchors);
});

下面是一个演示行为的最小jsfiddle (需要iDevice):https://jsfiddle.net/y723oet0/2/

如果任何人有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-05-01 03:32:49

fastclick.js保留一个名为this.targetElement的内部变量,该变量跟踪您当前正在点击的元素。当touchend事件激发时,fastclick.js会检查触控结束的元素是否与触控开始的元素相同。

在地图上正常的新点击时,this.targetElement开始时为空,并且一切正常。如果元素被快速点击,那么this.targetElement = <a>和就会停留在该状态,这会导致fastclick.js内部函数onMouse拒绝下一次地图单击。

我们通过修改fastclick.js来解决这个问题,如下所示:

代码语言:javascript
运行
复制
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

此修补程序导致在地图外部开始的touchend事件上清除this.targetElement变量,以便地图上的下一次点击不会被阻止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28197921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档