需要 d3 刷才能在触摸设备上工作

Need d3 brush to NOT work on touch devices

我正在根据 Mike Bostock's code here.
实现 d3 的画笔行为 jsfiddle version

我希望画笔仅适用于鼠标事件,而不适用于触摸事件。我试过这个:

function brushended() {
    if (d3.event.sourceEvent && d3.event.sourceEvent.type != "mouseup") return; 
    // Code for zooming
    // ...
}

Touch 现在可以创建画笔矩形,但不会做任何进一步的操作。所以,我的objective就完成了一半。这就是我想要的:在触摸设备上,画笔应该被完全忽略并且触摸应该执行它的默认行为(例如 touchmove 用于滚动,两指用于缩放)。

为您的 brush 添加过滤器:

var brush = d3.brush().filter(() => event instanceof MouseEvent).on("end", brushended)

这只会激活 MouseEvent 的画笔并忽略 TouchEvent