如果您的意思是合并路径,例如使用 Illustrator Pathfinder 面板 - 将多条路径变成一条路径(不是一组路径),合并重叠 - 我很确定没有直接的 Raphael 或 SVG 等价物。
最接近的是,创建一个复合路径(又名复合路径)——相当于 Illustrator 中的 cmd-8 或 Object > Make Compound Path。这会将路径合并为一条路径,但不会删除重叠区域。
基本上,对于一组paper.set( paper.path('M0,0 4,0 0,4z'),paper.path('M9,9 4,9 9,4z') );,等效的复合路径将是paper.path('M0,0 4,0 0,4z M9,9 4,9 9,4z'); - 只需将路径定义合并为一个,每个都以自己的M 开头。
与拉斐尔集的一些差异:
- 开销更少(它只是一个复杂的路径,而不是几个单独的单独路径元素)
- 在移动、排序等时减少意外:
- 应用于 Raphael 集合的事物依次应用于每个项目,而不是作为一个单元的集合 - 例如,
toFront() 更改了集合 within 的顺序,并以每个项目为中心进行变换,就像 Illustrator 的 transform each 一样,除非您为变换提供静态坐标。
- 但是,应用于复合路径的事物会作为一个单元应用于整个复合路径。
- 复合路径的子路径不能具有不同的属性
- 渐变之类的东西在整个复合路径中应用一次,而对于集合,每个单独的路径上都会有单独的渐变
JSBIN demo - 比较梯度,看看复合对如何只是 DOM 上的一条路径。
这是一个简单的插件,它增加了获取集合并从中创建复合路径的功能:
Raphael.st.compoundPath = function(){
var positions = [];
this.forEach( function( element ){
positions.push( element.compoundPath() );
});
return positions.join('');
}
Raphael.el.compoundPath = function(){
var path = this.attr('path');
return path ? Raphael.parsePathString( path ).join('') : '';
}
然后像这样使用它:
var someSet = paper.set(paper.path('M0,0 4,0 0,4z'),paper.path('M9,9 4,9 9,4z'));
var compPath = paper.path( someSet.compoundPath() );
someSet.remove(); // if you want to replace the set with a compound path
请注意,它只组合一组路径 - 如果您需要将其他形状与路径组合,您需要先将它们转换为路径。