【问题标题】:How to zoom path to fit container如何缩放路径以适合容器
【发布时间】:2016-02-04 10:10:34
【问题描述】:

我有一个显示一些 SVG 路径的画布。我用 KonvaJs 画了这些。用户应该能够单击任何这些路径并放大它。单击路径后,画布应缩放到路径适合画布全尺寸的位置。见this JsFiddle。 (路径将从其他来源导入)。

我知道你可以像这样缩放图层:

layer.scale({ 
    x : 2,
    y : 2
});

但我不知道 xy 需要什么值才能获得正确的比例。

所以,我的问题是:如何使用 KonvaJs 缩放/缩放路径以适应其容器?

我希望你明白我的意思。如果没有,AmCharts' Maps 会做我想要完成的事情。当您单击一个国家/地区时,画布会放大它。缩放动画会很好,但不是必需的。我没有使用 AmCharts,因为它不符合我的(其余)需求。

注意:我开始使用 KonvaJs 是因为我以前使用过 KineticJs。据我了解,KineticJs 不再维护,但 KonvaJs 是它的一个分支(如果我错了,请纠正我)。如果您知道有更好的库来执行此操作,请告诉我。

【问题讨论】:

    标签: javascript html canvas svg konvajs


    【解决方案1】:

    您可以使用 nice 函数getClientRect() 来检测任何核心形状的边界框。

        var rect = e.target.getClientRect();
        var scale = Math.max(
            stage.width() / rect.width,
          stage.height() / rect.height
        );
        layer.x(-rect.x * scale);
        layer.y(-rect.y * scale);
        layer.scale({x: scale, y: scale});
    

    演示:https://jsfiddle.net/g06utup0/1/

    注意:在进行演示时,我在 Path.getClientRect() 计算中发现了错误。所以你必须使用来自 repo 的最新版本。

    【讨论】:

    • 啊,这就是我需要的功能,谢谢!我将Math.max 更改为Math.min,因此在缩放整个路径时可见:jsfiddle.net/g06utup0/2 你在getClientRect() 中发现了什么错误?
    • @lavrton,你好!我以你的小提琴为例,但我得到了一个意想不到的结果,你能看看吗? jsfiddle.net/3qu1qmjs (getClientRect 返回错误的矩形)
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2021-11-28
    • 1970-01-01
    • 2011-01-20
    相关资源
    最近更新 更多