D3之svg transform 与 css3 transform 区别与联系
D3就不用多介绍了,在数据可视化界属于大佬级别的js库。在这里主要想记录一下在写程序期间遇到的一个问题。
如下图所示,想完成主视图在小地图上的映射,小地图的白色矩形框用来代表当前主视图可见区域,主视图可以进行缩放和平移。因此涉及到一些变换计算。

mainChart.group = mainChart.svg.append("g")
.attr("transform", "translate(" + mainChart.width / 2 + "," + mainChart.height / 2 + ")");
/*mainChart.group的变换导致mainChart.g的坐标原点并不在左上角,而在svg的坐标变换中不能设置变换的相对坐标,但是css3可以设置相对坐标(attr使用svg变换,style使用css3变换)*/
mainChart.g = mainChart.group.append("g")
.style("transform-origin", (-mainChart.width / 2) + "px " + (-mainChart.height / 2) + "px");
mainChart.svg_links = mainChart.g.selectAll(".links")
.data(mainChart.result_links)
.enter()
.append("path")
.attr("id", function (d, i) {
return "link_" + i;
})
.attr("stroke-opacity", mainChart.now_link_opacity)
.attr("stroke", mainChart.now_link_color)
.attr("stroke-width", mainChart.now_link_size)
.attr("fill", "none")
.attr("d", mainChart.line);
mainChart.svg_nodes_g = mainChart.g.selectAll(".nodes")
.data(mainChart.result_nodes.filter(function (d) {
return !d.children;
}))
.enter()
.append("g")
.attr("id", function (d) {
return "node_" + d.id;
});
最开始是使用一个g元素将这个视图平移至主视图的正中心,然后再添加一个g元素用来存放点和边的绘制。此时,第二个g元素的坐标原点是以父节点平移后的位置为坐标原点,即主视图正中心为坐标原点。而在小地图中,矩形的变换是以小地图svg的右上角为坐标原点,导致两个坐标原点不能匹配,因此需要完成对坐标原点的修正。而svg的变换中无法设置transform-origin属性,所以采用css3,将第二g元素的坐标原点重新设置为主视图的左上角,从而保持一致。
关于svg的transform和css3的transform区别和联系:http://www.zhangxinxu.com/wordpress/2015/10/understand-svg-transform/
D3之svg transform 与 css3 transform 区别与联系的更多相关文章
- 【CSS3】 理解CSS3 transform中的Matrix(矩阵)
理解CSS3 transform中的Matrix(矩阵) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu ...
- 理解CSS3 transform中的Matrix(矩阵)
一.哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如“拉普拉斯不等式”).这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面“Matrix(矩阵) ...
- 理解CSS3 transform中的Matrix(矩阵)——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2427 一.哥,我被你 ...
- CSS3 Transform变形理解与应用
CSS3 Transform变形理解与应用 Transform:对元素进行变形:Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画.但只有两个关键贞.开 ...
- css3 transform中的matrix矩阵
CSS3中的矩阵CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform),后者则是3D变换.2D变换矩阵为3*3, 如上面矩阵示 ...
- CSS3 transform详解,关于如何使用transform
transform是css3的新特性之一.有了它可以box module变的更真实,这篇文章将全面介绍关于transform的使用. transform的作用 transform可以让元素应用 2D ...
- 小心 CSS3 Transform 引起的 z-index "失效"
https://www.douban.com/note/343402554/ http://www.jb51.net/css/255811.html 最后我直接removeClass;把transfo ...
- CSS3 transform rotate(旋转)锯齿的解决办法
-moz-transform: rotate(5deg);-webkit-transform: rotate(5deg); 把图片旋转了5度.本以为轻而易举,可遇到了问题.在Fireofx中显示正常, ...
- CSS3 transform对普通元素的N多渲染影响
一.一入transform深似海 一个普普通通的元素,如果应用了CSS3 transform变换,即便这个transform属性值不会改变其任何表面的变化(如scale(1), translate(0 ...
随机推荐
- odoo接口跨域问题
odoo Controller接口开发 POST请求的跨域问题解决方法 1.odoo Controller接口开发,前端在请求的时候会发生跨域问题,报错信息如下:Function declared a ...
- SpringData JPA 使用原生 SQL
在实现个人博客系统的归档功能的时候,遇上这样的需求: 先把数据库中所有条目的时间按照年月分组,并查询出年月(String)的列表 根据年月字符串查询符合条件的博客,并返回博客列表 由于数据访问层使用的 ...
- 论文笔记:(2019CVPR)PointConv: Deep Convolutional Networks on 3D Point Clouds
目录 摘要 一.前言 1.1直接获取3D数据的传感器 1.2为什么用3D数据 1.3目前遇到的困难 1.4现有的解决方法及存在的问题 二.本文idea 2.1 idea来源 2.2 初始思路 2.3 ...
- 随处可编辑的编辑器之神VIM
据说这世界上只有三种编辑器:Vim,Emacs 和 其他编辑器,其中 Vim 被称作编辑器之神,Emacs 被称作神的编辑器,当然,其他编辑器永远只能是其他编辑器. 拿一位 网友的话 来说,VIM 的 ...
- Nacos 自动更新配置不生效问题
版本 Nacos 1.4.1 SpringCloud 2020.0.3 解决方案 bootstrap.properties 增加应用名配置即可 spring.application.name=serv ...
- 组合数取模(lukas)板子
求 C(n,m)%mo #include<bits/stdc++.h>#define re register int#define mo 10007#define ll long long ...
- jadx的使用
使用jadx之前必须安装配置java环境才能正常打开运行 https://www.cnblogs.com/yhoil/p/14808648.html 一.前言 今天介绍一个非常好用的反编译的工具 ja ...
- 【前端 · 面试 】HTTP 总结(十)—— HTTP 缓存应用
最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正.交流. 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火. 前言 通过前面几篇内容的学习,我们 ...
- C++利用模板在Windows上快速调用DLL函数
更新日志 --------- 2021/08/01 更新V2.2 增加 GetHmodule 函数 - 允许用户获取HMODULE以验证加载DLL是否成功. 2021/08/03 更新V2.3 增加 ...
- Vulhub-DC-1靶场
前言: DC-1靶场是Vulhub系一款渗透测试的实战靶场,拥有五个Flag.本篇博客讲述了如何拿去这五个Flag,并详细描述其中的注意点. 实验环境: 虚拟机环境:virtualbox 虚拟机1:D ...