首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用非鼠标、非触摸事件与D3.js图形进行交互?如果是这样的话,最有效的方法是什么?

是否可以使用非鼠标、非触摸事件与D3.js图形进行交互?如果是这样的话,最有效的方法是什么?
EN

Stack Overflow用户
提问于 2013-09-14 13:33:24
回答 2查看 474关注 0票数 1

我使用的不是鼠标,而是Leap Motion。它是一种运动感应设备,允许使用手指、手和手势,而不是鼠标。

我的代码是在用户的手指与屏幕相交的地方绘制点,因此用户的手指在网页上用蓝色圆圈表示(与以下代码相同:http://schnipz.github.io/leap-motion-demos/d3.js/index.html)。

我在网页上也有一个Force-Directed图,与这个示例相同: bl.ocks.org/mbostock/4062045

我希望允许用户在手指(蓝色圆圈)与节点相交时“拖动”节点。

我可以让点击模拟代码工作,但当我尝试使用X和Y位置时,例如...

代码语言:javascript
复制
function mouseSim(type, x, y)
{

    var simulatedEvent = document.createEvent("MouseEvent");
    simulatedEvent.initMouseEvent(type, true, true, window, 1,
            x, y,
            x, y, false,
            false, false, false, 0/*left*/, null);

    document.dispatchEvent(simulatedEvent);
    console.log(type + " at " + x + ", " + y);
}

我得到了所需的控制台输出,但没有与图形发生交互。

是否可以使用非鼠标、非触摸事件与D3.js图形进行交互?如果是这样的话,最有效的方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2013-09-14 16:48:27

是不是就像这样简单:

代码语言:javascript
复制
function mouseSim(type, x, y)
{

    var simulatedEvent = document.createEvent("MouseEvent");
    simulatedEvent.initMouseEvent(type, true, true, window, 1,
            x, y,
            x, y, false,
            false, false, false, 0/*left*/, null);

    document.dispatchEvent(simulatedEvent);
    console.log(type + " at " + x + ", " + y);

    doStuffInD3(x,y);
}

function doStuffInD3 (x,y) {
   force directed stuff dependent on x and y
}

在相互作用后,你只是将x和y传递给force函数?

票数 0
EN

Stack Overflow用户

发布于 2013-09-14 17:38:43

实际上,您不需要模拟事件来实现这一点(并且模拟事件可能会使它比需要的更难一些)。您只需将leap pointable与节点匹配,将其fixed属性设置为true,以防止强制布局更新其位置,并根据pointable的运动移动节点。

如果我理解正确的话,我想我已经实现了那个here。来源是here

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

https://stackoverflow.com/questions/18798672

复制
相关文章

相似问题

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