d3.dispatch是d3设置的一种调度机制
var dispatch = d3.dispatch("start", "end");
然后用on来注册回调函数。
dispatch.on("start", callback1);
dispatch.on("start.foo", callback2);
dispatch.on("end", callback3);
然后可以使用dispatch.call和dispatch.apply启用回调:
dispatch.call("start");
d3-drag 拖拽
将拖拽应用到指定的selection。通常不适用这个方法应用拖拽,而是通过 selection.call。例如,将拖拽实例应用到一个选择集上:
d3.selectAll(".node").call(d3.drag().on("start", started));
在内部拖拽行为使用 selection.on将拖拽必需的事件绑定到元素上,事件名称都带有 .drag
,因此可以使用这个特殊的事件名来解绑拖拽事件:
selection.on(".drag", null);
drag.filter([filter]) <源码>
如果指定了 filter,则将 filter 设置为拖拽行为的过滤器。如果没有指定 filter 则返回当前的过滤器,默认为:
function filter() {
return !d3.event.button;
}
如果过滤器返回假,则初始事件会被忽略并且不会启动拖拽手势。也就是说过滤器可以定义哪些事件被忽略,默认的过滤器会忽略辅助按钮上的鼠标按下事件,因为这些按钮通常用作其他的作用,比如上下文菜单。
# drag.clickDistance([distance]) <源码>
如果指定了 distance 则将click
事件的触发条件: mousedown
和 mouseup
之间鼠标移动的距离设置为指定的距离。如果鼠标按下时的坐标与鼠标抬起时的坐标之间的距离大于或等于 distance 则不会触发随后的 click
事件。如果没有指定 distance 则返回当前的默认值,默认为 0。距离阈值通过坐标系统 (event.clientX 和 event.clientY) 测量得到。