我刚刚开始玩SVG和Raphael.js,我正在尝试绘制一个完整的弧线,但不知道如何开始。我正在尝试绘制一个基本的挂锁,并使主体和螺栓的两个部分适合顶部的弧形。它基本上是一个180度弧,10像素宽。我猜我需要使用.path()但不确定语法或者我是否想要使用“curveTo”或“arc” - 努力找到任何好的SVG或Raphael教程网站,说实话。
var padlockBody = paper.rect(100, 100, 100, 100, 5);
padlockBody.attr("fill", "#000000");
var leftBoltPart = paper.rect(120, 70, 10, 30);
leftBoltPart.attr("fill", "#000000");
var rightBoltPart = paper.rect(170, 70, 10, 30);
rightBoltPart.attr("fill", "#000000");
// TODO: filled arc to fit on top of left/right bolt parts
答案 0 :(得分:4)
手工编写电弧是众所周知的挑战(在纯SVG或拉斐尔,它是相同的)。
我通常会使用这些方法扩展Raphael(积分属于the55)
// http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands
Raphael.fn.arc = function(startX, startY, endX, endY, radius1, radius2, angle) {
var arcSVG = [radius1, radius2, angle, 0, 1, endX, endY].join(' ');
return this.path('M'+startX+' '+startY + " a " + arcSVG);
};
Raphael.fn.circularArc = function(centerX, centerY, radius, startAngle, endAngle) {
var startX = centerX+radius*Math.cos(startAngle*Math.PI/180);
var startY = centerY+radius*Math.sin(startAngle*Math.PI/180);
var endX = centerX+radius*Math.cos(endAngle*Math.PI/180);
var endY = centerY+radius*Math.sin(endAngle*Math.PI/180);
return this.arc(startX, startY, endX-startX, endY-startY, radius, radius, 0);
};
您可以在此处找到演示:http://jsfiddle.net/cahT9/