D3过渡,边际顶部进行得不顺利
D3 transition, margin-top does not proceed smoothly
如果你转到这个plunk,你可以看到margin-top
从25%
开始,然后我尝试
.transition().duration(3000)
.style("margin-top", "1%")
但是,输入在返回之前会下降到底部。我想知道为什么会这样。
有趣的谜题。d3代码中的几个不同的细节——每个细节都旨在使转换更加灵活——正在密谋破坏你完美简单的转换。
transition.style()
方法使用getComputedStyle
来计算转换的起始值,即使您已显式内联或使用d3设置样式也是如此。
其问题在于浏览器在确定getComputedStyle
的结果时自动将百分比值转换为像素。因此,尽管您打算进行从25%
到1%
的直接计算,但d3试图计算的实际转换是在124.75px
到1%
之间。
当插值任何不是简单数字(或颜色)的值时,使用d3的字符串插值方法。插值器识别before和after字符串中的所有数字,并转换它们,但对于字符串的其余部分,它只替换"after"值。
因此,对于从124.75px
到1%
的转换,个数从124.75
转换到1
,但单元立即从px
翻转到%
。后果你的元素突然从margin-top: 25%
跳到margin-top: 124%
(或大约),然后下降到1%。
解决方法是自己计算1%边距的像素长度(记住,上边距和下边距的%值是相对于父容器的宽度计算的),并将其用作转换的最终值。然后,在转换完成后(在each("end", function)
调用中),以百分比值重新设置裕度,以便在窗口调整大小时做出响应。
相关文章:
- 解决小问题(工作不顺利)
- 在 JavaScript 中是否有可能在指定点获取一个元素,如果它不在顶部但实际上可见
- 检测文档何时不在顶部
- 使用 CSS3 平移而不是顶部/左侧偏移位置
- jQuery:在滚动时切换标题类,如果页面不在顶部
- 反转HTML表的行而不反转顶部
- D3过渡,边际顶部进行得不顺利
- 如何将锚定在(外部)页面的中间而不是顶部
- D3太阳爆发与更新的数据:多个过渡仍然snap,不顺利
- 平滑滚动到顶部不工作顺利
- 使文本输入出现在页面的中心而不是顶部
- jQuery滚动到顶部,但不完全顶部
- 响应式JS页面从底部而不是顶部加载
- 当滚动条不在顶部时隐藏元素
- 我能让视差滑动停止在页面的中间而不是顶部吗?
- 同一页面上的多个计时器;工作不顺利
- 使兄弟姐妹元素固定,而不考虑顶部元素的位置
- 引导选项卡 CSS 框阴影在选项卡内容底部而不是顶部
- jQuery航点,在视口中心而不是顶部激活
- 为什么Javascript代码工作在底部而不是顶部?