| export const enum ClipPathTypes { |
| RECT = 'rect', |
| ELLIPSE = 'ellipse', |
| POLYGON = 'polygon', |
| } |
|
|
| export const enum ClipPaths { |
| RECT = 'rect', |
| ROUNDRECT = 'roundRect', |
| ELLIPSE = 'ellipse', |
| TRIANGLE = 'triangle', |
| PENTAGON = 'pentagon', |
| RHOMBUS = 'rhombus', |
| STAR = 'star', |
| } |
|
|
| interface ClipPath { |
| [key: string]: { |
| name: string; |
| type: ClipPathTypes; |
| style: string; |
| radius?: string; |
| createPath?: (width: number, height: number) => string; |
| }; |
| } |
|
|
| export const CLIPPATHS: ClipPath = { |
| rect: { |
| name: '矩形', |
| type: ClipPathTypes.RECT, |
| radius: '0', |
| style: '', |
| }, |
| rect2: { |
| name: '矩形2', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 0 100%)', |
| createPath: (width: number, height: number) => { |
| return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L 0 ${height} Z`; |
| }, |
| }, |
| rect3: { |
| name: '矩形3', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 20% 100%, 0% 80%)', |
| createPath: (width: number, height: number) => { |
| return `M 0 0 L ${width * 0.8} 0 L ${width} ${height * 0.2} L ${width} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.8} Z`; |
| }, |
| }, |
| roundRect: { |
| name: '圆角矩形', |
| type: ClipPathTypes.RECT, |
| radius: '10px', |
| style: 'inset(0 round 10px)', |
| }, |
| ellipse: { |
| name: '圆形', |
| type: ClipPathTypes.ELLIPSE, |
| style: 'ellipse(50% 50% at 50% 50%)', |
| }, |
| triangle: { |
| name: '三角形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(50% 0%, 0% 100%, 100% 100%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.5} 0 L 0 ${height} L ${width} ${height} Z`; |
| }, |
| }, |
| triangle2: { |
| name: '三角形2', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(50% 100%, 0% 0%, 100% 0%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.5} ${height} L 0 0 L ${width} 0 Z`; |
| }, |
| }, |
| triangle3: { |
| name: '三角形3', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(0% 0%, 0% 100%, 100% 100%)', |
| createPath: (width: number, height: number) => { |
| return `M 0 0 L 0 ${height} L ${width} ${height} Z`; |
| }, |
| }, |
| rhombus: { |
| name: '菱形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.5} 0 L ${width} ${height * 0.5} L ${width * 0.5} ${height} L 0 ${height * 0.5} Z`; |
| }, |
| }, |
| pentagon: { |
| name: '五边形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.5} 0 L ${width} ${0.38 * height} L ${0.82 * width} ${height} L ${0.18 * width} ${height} L 0 ${0.38 * height} Z`; |
| }, |
| }, |
| hexagon: { |
| name: '六边形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(20% 0%, 80% 0%, 100% 50%, 80% 100%, 20% 100%, 0% 50%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.2} 0 L ${width * 0.8} 0 L ${width} ${height * 0.5} L ${width * 0.8} ${height} L ${width * 0.2} ${height} L 0 ${height * 0.5} Z`; |
| }, |
| }, |
| heptagon: { |
| name: '七边形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(50% 0%, 90% 20%, 100% 60%, 75% 100%, 25% 100%, 0% 60%, 10% 20%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.5} 0 L ${width * 0.9} ${height * 0.2} L ${width} ${height * 0.6} L ${width * 0.75} ${height} L ${width * 0.25} ${height} L 0 ${height * 0.6} L ${width * 0.1} ${height * 0.2} Z`; |
| }, |
| }, |
| octagon: { |
| name: '八边形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.3} 0 L ${width * 0.7} 0 L ${width} ${height * 0.3} L ${width} ${height * 0.7} L ${width * 0.7} ${height} L ${width * 0.3} ${height} L 0 ${height * 0.7} L 0 ${height * 0.3} Z`; |
| }, |
| }, |
| chevron: { |
| name: 'V形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(75% 0%, 100% 50%, 75% 100%, 0% 100%, 25% 50%, 0% 0%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.75} 0 L ${width} ${height * 0.5} L ${width * 0.75} ${height} L 0 ${height} L ${width * 0.25} ${height * 0.5} L 0 0 Z`; |
| }, |
| }, |
| point: { |
| name: '点', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(0% 0%, 75% 0%, 100% 50%, 75% 100%, 0% 100%)', |
| createPath: (width: number, height: number) => { |
| return `M 0 0 L ${width * 0.75} 0 L ${width} ${height * 0.5} L ${width * 0.75} ${height} L 0 ${height} Z`; |
| }, |
| }, |
| arrow: { |
| name: '箭头', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(0% 20%, 60% 20%, 60% 0%, 100% 50%, 60% 100%, 60% 80%, 0% 80%)', |
| createPath: (width: number, height: number) => { |
| return `M 0 ${height * 0.2} L ${width * 0.6} ${height * 0.2} L ${width * 0.6} 0 L ${width} ${height * 0.5} L ${width * 0.6} ${height} L ${width * 0.6} ${height * 0.8} L 0 ${height * 0.8} Z`; |
| }, |
| }, |
| parallelogram: { |
| name: '平行四边形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(30% 0%, 100% 0%, 70% 100%, 0% 100%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.3} 0 L ${width} 0 L ${width * 0.7} ${height} L 0 ${height} Z`; |
| }, |
| }, |
| parallelogram2: { |
| name: '平行四边形2', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(30% 100%, 100% 100%, 70% 0%, 0% 0%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.3} ${height} L ${width} ${height} L ${width * 0.7} 0 L 0 0 Z`; |
| }, |
| }, |
| trapezoid: { |
| name: '梯形', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(25% 0%, 75% 0%, 100% 100%, 0% 100%)', |
| createPath: (width: number, height: number) => { |
| return `M ${width * 0.25} 0 L ${width * 0.75} 0 L ${width} ${height} L 0 ${height} Z`; |
| }, |
| }, |
| trapezoid2: { |
| name: '梯形2', |
| type: ClipPathTypes.POLYGON, |
| style: 'polygon(0% 0%, 100% 0%, 75% 100%, 25% 100%)', |
| createPath: (width: number, height: number) => { |
| return `M 0 0 L ${width} 0 L ${width * 0.75} ${height} L ${width * 0.25} ${height} Z`; |
| }, |
| }, |
| }; |
|
|