【问题标题】:How to catch pinch and stretch gesture events in d3.zoom (d3v4/v5)如何在 d3.zoom (d3v4/v5) 中捕捉捏合和拉伸手势事件
【发布时间】: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" 用于触摸手势的模拟是什么?如何注册用户在触控板或手机上进行捏合和拉伸的回调?

注意事项

更新

似乎"wheel.zoom"d3.event.type == "wheel" 在捏合和拉伸时捕捉到了捏合手势。此外,d3.event.deltaZ == 0 用于所有这些事件。

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    原来触控板捏合以wheel.zoom 的形式发出,d3.event.ctrlKey 设置为 True。这就是浏览器所同意的:

    https://medium.com/@auchenberg/detecting-multi-touch-trackpad-gestures-in-javascript-a2505babb10e

    相当不直观,但你有它。

    这是我的最终代码:

    svg.call(d3.zoom().on("zoom", zoomed)).on("wheel.zoom", wheeled);
    
    transform = d3.zoomTransform(g);
    transform.x += margin.left;
    transform.y += margin.top;
    g.attr("transform", transform);
    
    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);
        if (d3.event.ctrlKey) {
            current_transform.k = current_transform.k - d3.event.deltaY * 0.01;
        } else {
            current_transform.y = current_transform.y - d3.event.deltaY;
        }
        g.attr("transform", current_transform);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多