javascript - KineticJS:降低拖动事件的敏感性

标签 javascript drag-and-drop touch kineticjs

背景:我正在尝试构建一个应用程序,用户可以通过同时单击两个动力学形状来执行操作,但也可以在 Canvas 上拖动各个形状自由地。我意识到 KineticJS 还不支持多点触控,但在解决该问题之前我遇到了另一个问题。

问题: 我正在使用的触摸屏(Planar 27"Helium,在 Windows 8 的 Chrome 上)似乎很难很好地解决触摸事件。这意味着在 Kinetic 中“单击”(并按住)一个形状会触发拖动事件,而不是单个事件。单击或点击事件。发生这种情况时,我可以明显地看到形状在手指下方的几个像素处跳跃,这告诉我触摸事件正在移动位置,即使手指停留在同一个位置。

我想要什么: 一种调整拖动事件灵敏度的方法,以便仅当距当前形状位置的距离达到一定像素数时才触发它们。理想情况下,将触发 click 事件,然后在达到某个阈值后启动 Dragstart。我假设停止拖动事件最初触发也意味着当我按住按钮时,形状将停止在我的手指下稍微移动。

我对 KineticJS 源代码进行了窥探,但我似乎看不出应该在哪里实现这样的代码。

<小时/>

解决了!请参阅下面我的解决方案。

最佳答案

通过在 KineticJS 项目最近的提交中引入 dragDistance 属性( https://github.com/ericdrowell/KineticJS/commit/0b93e21e0b9e11165dfed7574dbafa0ae2a144e0 ,或参阅 https://github.com/ericdrowell/KineticJS/pull/725 获取拉取请求),这个问题得到了解决

要使用该功能,只需将触发之前拖动必须超过的值(以像素为单位)分配给形状或组的 DragDistance 属性即可。低于此阈值的 touchStart 事件将不会触发 dragStart,这意味着 tap 事件现在在触摸场景中更加有用。

var rect = new Kinetic.Rect({
    draggable: true,
    dragDistance: 5
});

关于javascript - KineticJS:降低拖动事件的敏感性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21756316/

相关文章:

javascript - 通过将 var 传递给函数来隐藏 Div

javascript - 如何从 spring mvc Controller 获取 jQuery $.post 的 POST 请求参数?

javascript - 如何在 JavaScript 中按 4 个属性排序

javascript - 在网格 Ext JS 4 中重新排序行

javascript - 上传文件时检测取消的拖放操作

java - libgdx - 检查 body 是否被触摸

javascript - 使用分隔符组合对象数组的元素

javascript - 如何在 js/html 中从一列拖放到一个区域,使列中的对象可用于重新拖动

android - 确定触摸输入消费者

javascript - 拉斐尔的一只手可拖动时钟 - 无法获取鼠标点击位置