42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
|
/** 绘制圆角矩形原型方法 */
|
|||
|
export default {
|
|||
|
name: 'roundRect',
|
|||
|
handle: (canvas, ctx, x, y, w, h, r = 15, fill = false, stroke = false) => {
|
|||
|
if (r === 0) {
|
|||
|
if (stroke)
|
|||
|
ctx.strokeRect(x, y, w, h);
|
|||
|
if (fill)
|
|||
|
ctx.fillRect(x, y, w, h);
|
|||
|
return;
|
|||
|
}
|
|||
|
if (w < 2 * r) {
|
|||
|
r = w / 2;
|
|||
|
}
|
|||
|
if (h < 2 * r) {
|
|||
|
r = h / 2;
|
|||
|
}
|
|||
|
// 开始绘制
|
|||
|
ctx.beginPath();
|
|||
|
ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
|
|||
|
// 移动复制
|
|||
|
ctx.moveTo(x + r, y);
|
|||
|
ctx.lineTo(x + w - r, y);
|
|||
|
ctx.lineTo(x + w, y + r);
|
|||
|
// (x,y,z,j,f) x,y圆心z半径,j起始弧度f,终止弧度
|
|||
|
ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);
|
|||
|
ctx.lineTo(x + w, y + h - r);
|
|||
|
ctx.lineTo(x + w - r, y + h);
|
|||
|
ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5);
|
|||
|
ctx.lineTo(x + r, y + h);
|
|||
|
ctx.lineTo(x, y + h - r);
|
|||
|
ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);
|
|||
|
ctx.lineTo(x, y + r);
|
|||
|
ctx.lineTo(x + r, y);
|
|||
|
if (stroke)
|
|||
|
ctx.stroke();
|
|||
|
if (fill)
|
|||
|
ctx.fill();
|
|||
|
ctx.closePath();
|
|||
|
}
|
|||
|
};
|