标题几乎说明了所有,试图将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;
编辑:
我在调试器中修改过,似乎从调度程序触发时,传递给d3-drag的CustomEvent对象缺少视图变量。因此理论上将Window对象添加到它可以修复它。我不知道如何做到这一点,或者更确切地说如何在不修改d3源的情况下做到这一点。
答案 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)
方法。