【发布时间】:2021-06-07 14:05:45
【问题描述】:
假设我们有以下 SVG 路径:
<path id="heart" d="M 10,30 A 20,20 0,0,1 50,30 A 20,20 0,0,1 90,30 Q 90,60 50,90 Q 10,60 10,30 z" />
我想知道是否有一种方法可以仅填充与给定比例成比例的该形状的一部分区域。我确实需要准确地为等于比率的像素量着色。
例如,ratio = 0,6,则只需填充形状的 60% 像素(从底部开始)。
编辑:
我尝试在评论中实现@RobertLongson 的提示。你去:
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<linearGradient id="myGradient" gradientTransform="rotate(90)">
<stop offset="50%" stop-color="black" stop-opacity='0' />
<stop offset="50%" stop-color="black" />
</linearGradient>
<path id="heart" d="M 10,30 A 20,20 0,0,1 50,30 A 20,20 0,0,1 90,30 Q 90,60 50,90 Q 10,60 10,30 z" fill="url('#myGradient')" stroke="black" stroke-width="1" />
</svg>
但是,如果比率为 50%,这将不起作用。 (即我们没有为 50% 的像素着色)
【问题讨论】:
-
@RobertLongsonthanx。我是否需要像我在上面发布的示例中那样使用偏移量(即
stop offset="60%")?仍然不确定这是否选择了 60% 的区域(即填充像素的数量),或者它是否只是在 Y 坐标的 60% 处停止。 -
不知道是不是我记错了,但是线性渐变似乎不起作用(见帖子中的sn-p)
-
明确一点:报告的重复帖子都没有回答这个问题
-
如果你真的需要精确填充,比如说,area 的 60%(而不仅仅是 height 的 60%),那么线性渐变方法将不起作用,因为该算法严重依赖于路径的形状。您的问题很有趣,但是关闭它的人错误地忽略了面积和高度之间的差异。您会考虑创建一个更强调面积与高度差异的新模型吗?
标签: javascript svg d3.js