javascript - D3过渡,margin-top进展不顺利

标签 javascript html css d3.js

如果您转到this plunk ,您可以看到 margin-top25% 开始,然后我尝试

.transition().duration(3000)
    .style("margin-top", "1%")

但是,输入在返回之前会下降到底部。我想知道为什么会发生这种情况。

最佳答案

有趣的谜题。 d3 代码中的几个不同细节(每个细节都旨在使转换更加灵活)正在共同破坏您完美简单的转换。

transition.style()方法使用 getCompulatedStyle 来计算转换的起始值,即使您已显式内联或使用 d3 设置样式。

问题是浏览器会自动converts percentage values to pixels when determining the results of getComputedStyle 。因此,尽管您打算直接计算从 25%1%,但 d3 尝试计算的实际转换介于 124.75px1%

当插入任何非简单数字(或颜色)的值时,d3 的 string interpolation method用来。插值器识别之前和之后字符串中的所有数字,并转换它们,但对于字符串的其余部分,它只是替换为“after”值。

因此,对于从 124.75px1% 的转换,数字124.75 转换到 1,但单位立即从px翻转到%。结果?您的元素突然从 margin-top: 25% 跳到 margin-top: 124% (或附近),然后再降至 1%。

解决方法是自己计算 1% 边距的像素长度(请记住,顶部和底部边距的 % 值是相对于父容器的宽度计算的),并将其用作过渡的最终值。然后,在转换完成后(在 each("end", function) 调用中),重新设置百分比值的边距,以便在窗口大小调整时它能够做出响应。

关于javascript - D3过渡,margin-top进展不顺利,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25714744/

相关文章:

javascript - 使用 cshtml 制作 Morris.js 图表

javascript - 使用带有上下文/变量的 javascript 创建 HTML

html - IE 10 对中心定位 div 的条件注释的替代

Javascript else if 语句不起作用

IE 和 Chrome 中的 CSSStyleDeclaration 差异

php - 从父文件夹链接样式表

javascript - Twitter Bootstrap - 多个图像(缩略图)轮播 - 一次移动一个缩略图

javascript - 如何将 Babel 运行时包含到转换后的代码中?

php - keyup if 语句的 indexOf 字符串行为很奇怪?

html - 通过输入范围更改 css 规则