我有一个力导向图D3图表,使用
d3.behaviour.zoom
进行缩放和平移。它的工作很顺利,但因为我的图表在iPad上占据了整个屏幕,所以在触摸屏上向下滚动页面变得不可能,因为我的触摸会导致图表平移而不是滚动页面。我想在触摸设备上保留捏合缩放行为。是否有可能仅在d3.event.touches.length === 1
时取消touchmove.zoom
事件?如果这样做,所有触摸交互都将被禁用,因此滚动没问题,但无法再缩放图表:selection.call(zoom)
.on('touchstart.zoom', null)
.on('touchmove.zoom', null)
.on('touchend.zoom', null);
我也尝试添加另一个 touchmove
监听器,就像这样:
selection.call(zoom)
.on('touchmove', function () {
if (d3.event.touches.length === 1) {
d3.event.stopPropagation();
// i've also tried d3.event.preventDefault() but it doesn't do anything
}
});
我不认为我可以访问d3中的默认缩放touchmove
监听器,我想知道是否可以在touchstart
上删除监听器,然后在用户仅使用一个触摸时重新绑定它在touchend
上。
touchmove.zoom
处理程序来复制内置处理程序,是吗? - Daniel Crisp