(D3)调度" mousedown"使用拖动行为进行选择的事件会引发错误

时间:2017-07-04 11:09:14

标签: javascript d3.js

标题几乎说明了所有,试图将mousedown事件发送到具有拖动行为设置的选择抛出" TypeError:无法读取属性' document' of undefined",示例在片段中。

我试图考虑一些解决方法,因为我必须将mousedown传递给元素我在鼠标光标处添加以拖动它而不按两次鼠标按钮。任何意见都非常感谢。



d3.select('#dragable').call(d3.drag().on('drag', function() {
  d3.select(this).style('left', d3.event.x + 'px');
  d3.select(this).style('top', d3.event.y + 'px');
}))

d3.select('#dragable').dispatch('mousedown');

#dragable {
  position: absolute;
  left: 0;
  top: 0;
  background: red;
  width: 50px;
  height: 50px;
}

<script src="https://d3js.org/d3.v4.min.js"></script>
<div id="dragable">

</div>
&#13;
&#13;
&#13;

编辑:

我在调试器中修改过,似乎从调度程序触发时,传递给d3-drag的CustomEvent对象缺少视图变量。因此理论上将Window对象添加到它可以修复它。我不知道如何做到这一点,或者更确切地说如何在不修改d3源的情况下做到这一点。

2 个答案:

答案 0 :(得分:0)

尝试添加

.on('start', function() { dispatch.call("mousedown", this); });

drag功能,在

之后
var dispatch = d3.dispatch('mousedown');
dispatch.on('mousedown', function(){ });

答案 1 :(得分:-1)

原来我使用了错误的工具,因为selection.dispatch()用于调度自定义事件。要发送鼠标事件,我必须使用带有MouseEvent的.dispatchEvent(event)方法。