【发布时间】:2019-02-07 08:57:56
【问题描述】:
背景
我正在我的 d3v5 可视化中构建多个交互。单击和拖动应该让用户平移 svg 容器。滚轮应垂直平移。这两个都有效。
svg.call(d3.zoom().on("zoom", zoomed)).on("wheel.zoom", wheeled);
function zoomed() {
current_transform = d3.zoomTransform(g);
current_transform.x += d3.event.sourceEvent.movementX;
current_transform.y += d3.event.sourceEvent.movementY;
g.attr("transform", current_transform);
}
function wheeled() {
current_transform = d3.zoomTransform(g);
current_transform.y = current_transform.y - d3.event.deltaY;
g.attr("transform", current_transform);
}
问题
我想允许用户使用捏合和拉伸触摸手势来缩放经典意义上的 svg。 "wheel.zoom" 用于触摸手势的模拟是什么?如何注册用户在触控板或手机上进行捏合和拉伸的回调?
注意事项
-
大概是these touchstart, touchmove, touchend events。但是
svg.call(d3.zoom().on("zoom", zoomed)).on("wheel.zoom", wheeled).on("touchstart.zoom", () => console.log('here'));当我捏和拉伸时从不记录。
更新
似乎"wheel.zoom" 和d3.event.type == "wheel" 在捏合和拉伸时捕捉到了捏合手势。此外,d3.event.deltaZ == 0 用于所有这些事件。
【问题讨论】:
标签: javascript d3.js