javascript - 两条路径之间的 D3js 转换导致解析错误

标签 javascript svg d3.js

我尝试在两个路径/形状(在 illustrator 中设计)之间进行简单的过渡/插值。

我的项目中有d3,所以我使用它;但如果我能弄清楚该怎么做,我可以尝试其他方法。

我定义了几个变量(包括两个路径):

    var width = 300,
        height = 300;

    var svg = d3.select("body").append("svg")
        .attr("width", width)
        .attr("height", height);

    var path = svg.append("path"),
        d0 = "M12,2c5.514,0,10,4.486,10,10c0,5.514-4.486,10-10,10C6.486,22,2,17.514,2,12C2,6.486,6.486,2,12,2z M12,0 C5.372,0,0,5.372,0,12c0,6.629,5.372,12,12,12s12-5.371,12-12C24,5.372,18.628,0,12,0z",
        d1 = "M12,19.938c5.514,0,10-13.452,10-7.938c0,5.514-4.486,10-10,10C6.486,22,2,17.514,2,12C2,6.486,6.486,19.938,12,19.938z M12,0C5.372,0,0,5.372,0,12c0,6.629,5.372,12,12,12s12-5.371,12-12C24,5.372,18.628,0,12,0z";

然后我开始循环过渡:

    loop();

    function loop() {
        path
            .attr("d", d0)
            .transition()
            .duration(5000)
            .attr("d", d1)
            .transition()
            .delay(5000)
            .attr("d", d0)
            .each("end", loop);
    }

奇怪的事情发生了!

我的控制台中有一长串错误:错误:解析 d="M12,10.9402992c5.514,0,10-4.4542992,101.0597007999999999c0,5.514-4.486,10-10,10C6 时出现问题。 486,22,2,17.514,2,12C2,6.486,6.486,10.9402992,12,10.9402992z M12,0C5.372,0,0,5.372,0,12c0,6.629,5.372,12,12,12s12-5.371, 12-12C24,5.372,18.628,0,12,0z"

这不是有效的 svg。据我所知,带有 float 的 svg 路径是无效的(但我的基本路径中确实有 float 并且它们有效;所以我不太确定)。

看来我应该尝试在整个过渡过程中对所有数字进行四舍五入。

但我真的不明白为什么它在循环的最后 75% 而不是前 25%。

这是一个 fiddle ,可以看到操作失败:http://jsfiddle.net/vQabH/

为什么它适用于这个:http://jsfiddle.net/9bC6M/ (我根据这个例子制作的:http://bl.ocks.org/mbostock/3081153)

最佳答案

问题是在您的路径中,负值没有用空格或逗号分隔。比如有c5.514,0,10,4.486,10,10(3对值,用逗号隔开),但是c0,5.514-4.486,10-10, 10(同样是 3 对值,但并非全部用逗号分隔)。这会打乱 D3 转换。

D3 根本不知道如何在这样的字符串之间进行插值。例如,您收到 c5.514,0,10-4.4542992,101.0597007999999999 的解析错误(2 对值和一个虚假数字)。

将负值与其余值分开时效果很好,请参阅 here .从技术上讲,你可能会争辩说它应该仍然有效,因为它是一个有效的 SVG 路径,所以你可能想在 D3 网站上提出一个关于这个的问题。

关于javascript - 两条路径之间的 D3js 转换导致解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845902/

相关文章:

javascript - 双弧形状与 CSS jquery 或 javascript

javascript - dimple.js 中图表的响应式大小调整不起作用

javascript - Sunburst 分区数据被同一页上的第二个 sunburst 覆盖

javascript - 如何检查数据表是否有包含字符串的行并获取其行索引

javascript - d3.js 径向时钟,添加点而不是时钟指针

internet-explorer - Highcharts 将重复的 xmlns 属性添加到 IE 中的 SVG 元素

d3.js - 使用 d3 中的数据绑定(bind)创建轴

javascript - 验证并链接到另一个页面

javascript - AngularJs - $location.path 不起作用

javascript - 您必须向handleSubmit() 传递一个onSubmit 函数,或者将onSubmit 作为prop | 传递。回归形式