我在Raphael中以SVG路径符号绘制了一系列向后 - 'L'形状 - 只是一组数据点,每个数据点由水平线表示,然后是不同长度的垂直线。
<div id="canvas"></div>
<script>
var data = [
[{x: 32, y: 207}, {x: 50, y: 371}],
[{x: 34, y: 209}, {x: 39, y: 34}],
[{x: 32, y: 216}, {x: 58, y: 38}],
[{x: 70, y: 221}, {x: 93, y: 40}],
[{x: 89, y: 223}, {x: 105, y: 41}],
[{x: 113, y: 225}, {x: 150, y: 42}],
[{x: 132, y: 228}, {x: 173, y: 43}],
[{x: 305, y: 230}, {x: 354, y: 45}]
],
paper = Raphael("canvas", 400, 300),
path;
for (var c = 0; c < data.length; c += 1) {
path = "M" + data[c][0].x + "," + data[c][0].y;
path += "H" + data[c][1].x;
path += "V" + data[c][2].y;
paper.path(path).attr({"stroke": "#900", "stroke-width": 2})
}
</script>
我想给这些形状圆角半径为5左右。我是否必须手动将水平线绘制到距其预定位置5px,将曲线编程为PI / 2弧度,然后绘制垂直线的其余部分?
我希望有一种方法可以用一个半径小的SVG曲线来做到这一点,这样形状就会以直线前进直到它结束前不久然后向上弯曲 - 这正是圆角矩形的行为在Raphael或CSS3中。
我已经检查了SVG path guidelines,但我很难完成细节。
谢谢!
答案 0 :(得分:3)
这应该可以解决问题(至少在示例中):
更改此
path += "H" + (data[c][1].x)
到此:
path += "H" + (data[c][1].x-5)
;
并在其后添加以下行:
if (data[c][0].y > data[c][1].y) path += "s 5 0 5 -5";
else if (data[c][0].y < data[c][1].y) path += "s 5 0 5 5";
这涵盖了示例中的所有情况,但如果您想要定向圆角,请制作更多ifs。希望这有点帮助。
顺便说一下,我假设速记相对立方(s)是最适合你的曲线类型。