在D3中堆叠转换

 墙脚等红线_987 发布于 2023-02-02 19:26

我有一个已经应用了转换的SVG元素(可以是单个转换,也可以是多个转换的组合)。我正在尝试对其进行其他转换。问题在于该变换可以重复应用,并且需要与现有的变换状态堆叠在一起(因此将附加的变换附加到末尾是不切实际的)。从d3 API看,我没有发现任何可以应用相对转换的东西(尽管我必须承认,我对d3的高级功能并不熟悉)。手动解析当前的转换字符串,然后免费计算SVG已经在后台执行的转换矩阵,这似乎很愚蠢,有没有更好的方法?

例如,如果现有元素已经具有以下属性:

transform="translate(30) rotate(45 50 50)"

我两次调用此转换逻辑,希望每次在每个维度上将元素偏移1个像素,因此我需要解析和处理translate和rotate调用,因为新的转换无法在旋转之前应用。

1 个回答
  • 实际上,我一直在想应该为此使用一个特殊的函数,类似于该classed()函数处理添加和删除某些类而不弄乱其他类的方式。

    但是,在此之前,只需访问现有属性,然后连接字符串即可:

    selection.attr("transform", function(d){
            return this.getAttribute("transform") +
                         " translate(30) rotate(45 50 50)";
        });
    

    您也可以使用,d3.select(this).attr("transform")但是原始javascript应该可以工作并保存函数调用。

    请注意不要将属性转换与样式转换混淆。

    2023-02-02 19:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有