D3 v4仅在X维度中缩放分区布局

时间:2017-01-09 18:53:58

标签: d3.js

尝试围绕D3 v4缩放的特定用例。到目前为止我的例子可以在这里找到:

http://bl.ocks.org/gmarler/f6d17432f6eea34318bff477eb9ebd27

我可以根据需要绘制我的初始分区布局(我已经忽略了文本定位和颜色等复杂性),但是我没有在缩放方面做得很好。

目标是在点击其中一个svg rect元素时进行缩放。

通过" zoom",我的意思是与陈述的默认行为有些不同:

  • 完全禁用除元素点击之外的任何内容 - 无法通常与D3缩放关联的拖动,平移或鼠标滚轮活动。
  • 当单击svg rect元素时,元素仅在X维度中展开(或收缩),使其左侧邻接顶级svg容器的左侧,并且其右侧邻接顶级svg' sg容器的右侧。
    • 换句话说,点击的元素就是图表的宽度。
  • 垂直所有其他g / rect元素"以上"点击的应该适当缩放/翻译。
  • 所有其他元素垂直"低于"所点击的人不需要改变,因为我们点击的那个将占据图表容器宽度的100%。

所以,在这里我走了多远:

  • 我计算了比例因子(k) - 不确定我做得对。目标是将缩放系数设置为使点击元素的宽度扩展/收缩到svg宽度的任何值。
  • 并且我已经计算出x(tx)的变换是否会导致封装rect元素的g元素的左侧与svg的左侧对齐。
  • 使用k和tx,我使用d3.zoomIdentity.translate(tx,0)创建缩放变换.scale(k)
  • 现在我选择所有包含rects的g元素,撕掉当前的transform =" translate(x,y)"分开,并将缩放变换应用于翻译的x部分 - 这应该将元素的左侧移动到svg的左侧
  • 接下来,我选择每个g元素下的rect,并将缩放变换应用于width属性

这似乎让我更接近最终目标,但我确定我错过了一些东西:

  • 我真的有必要撕开变换="翻译(x,y)"我对g元素的看法?
  • 如果我多次点击某些元素,缩放比例会不断增加。我需要两个:
    • 保持原始缩放比率,以便我可以重置为它,或者只需单击最低的矩形元素即可返回到它。
    • 如果单击某个元素,它已经是100%宽度 - 我需要永远不允许缩放超过100%宽度
  • 点击任何给定元素,第一次将其扩展为100%宽度,但不是所有元素'祖先适当缩放 - 我不在乎祖先是否扩展到视口边缘的任何一端,但是一些祖先元素完全离开了视口,我无法解释。

0 个答案:

没有答案