【问题标题】:D3 4.9.1 returns different value for .style("transform")D3 4.9.1 为 .style("transform") 返回不同的值
【发布时间】:2017-12-15 09:13:04
【问题描述】:

在 d3 4.9.1 中,如果我调用以获取具有如下样式的元素的变换:

<g style="transform: translateX(3.84559px);"></g>

操作:

d3.select(this).style("transform")

d3v4.9.1 中的输出:

translateX(3.84559px)

但在 d3v4.8.0 中它有不同的输出:

matrix(1, 0, 0, 1, 3.84559, 0)

导致此问题的新版本是否有任何更改?

我有查找转换属性的不同参数的功能,现在已损坏:

contents.getTransformation = function (transform) {
    // console.log(transform);
    var g = document.createElementNS("http://www.w3.org/2000/svg", "g");
    g.setAttributeNS(null, "transform", transform);
    var matrix = g.transform.baseVal.consolidate().matrix;
    var a = matrix.a;
    var b = matrix.b;
    var c = matrix.c;
    var d = matrix.d;
    var e = matrix.e;
    var f = matrix.f;
    var scaleX = Math.sqrt(a * a + b * b);
    var scaleY = Math.sqrt(c * c + d * d);
    var skewX = a * c + b * d;
    if (scaleX) {
        a /= scaleX;
        b /= scaleX;
    }
    if (skewX) {
        c -= a * skewX;
        d -= b * skewX;
    }
    if (scaleY) {
        c /= scaleY;
        d /= scaleY;
        skewX /= scaleY;
    }
    if (a * d < b * c) {
        a = -a;
        b = -b;
        skewX = -skewX;
        scaleX = -scaleX;
    }
    return {
        translateX: e,
        translateY: f,
        rotate: Math.atan2(b, a) * Math.PI / 180,
        skewX: Math.atan(skewX) * Math.PI / 180,
        scaleX: scaleX,
        scaleY: scaleY
    };
};

参考:Replacing d3.transform in D3 v4

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    v4.9.0的发行说明有:

    更改 selection.style 以返回内联样式(如果存在)。

    由于您在 &lt;g&gt; 上指定了内联样式,因此在使用 v4.9.1 版本时将返回此值。以前的版本总是返回计算的样式。

    【讨论】:

    • 谢谢,我错过了那个版本。将更新我的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2016-10-23
    • 2014-02-10
    相关资源
    最近更新 更多