【发布时间】:2019-08-14 01:02:06
【问题描述】:
假设我有一个结构与此类似的 SVG:
<svg>
<defs>
<linearGradient id="gradient-red">...</linearGradient>
<linearGradient id="gradient-blue">...</linearGradient>
</defs>
<g class="node">
<circle r="50" style="fill: url('#gradient-red');"></circle>
</g>
<g class="node">
<circle r="100" style="fill: url('#gradient-red');"></circle>
</g>
<g class="node">
<circle r="150" style="fill: url('#gradient-red');"></circle>
</g>
<g class="node">
<circle r="200" style="fill: url('#gradient-red');"></circle>
</g>
<g class="node">
<circle r="250" style="fill: url('#gradient-red');"></circle>
</g>
</svg>
我现在有五个带有红色渐变的圆圈。我了解如何更改选定节点的颜色——我只是将其作为目标(通过d3.select)并将其样式更改为'fill', 'url("#gradient-blue")。但是我将如何转换那个节点的渐变填充从红色到蓝色?
这样的事情不会导致补间/过渡,而是会导致即时颜色交换:
d3.transition().duration(1000)
.tween('start', () => {
let test = d3.select(currentTarget);
test.transition().duration(1000).style('fill', 'url("#gradient-blue")');
如果我要转换渐变本身的 stop-color,它会改变 所有 的节点/圆(因为你正在改变 <defs> )。
我做错了什么?
【问题讨论】:
标签: javascript animation d3.js svg gradient