canvas draw问题求解
要实现的效果如下: [图片] 实现逻辑是: 1、先画虚部 - 画上虚线 - 画下虚线 - 画中虚线 - 画半透明圆 2、然后画实部 - 画上实线 - 画下实线 - 画纯色圆 目前遇到的问题是,我先把所有的部分实线完,然后统一执行ctx.draw()绘制总会出现各种问题: [代码]// 默认样式[代码][代码] [代码][代码]ctx.setLineWidth(1);[代码][代码] [代码][代码]ctx.setFillStyle([代码][代码]'rgba(250, 235, 215, 1)'[代码][代码]);[代码] [代码] [代码][代码]// 虚部[代码][代码] [代码][代码]ctx.setLineDash(dash);[代码][代码] [代码][代码]ctx.setStrokeStyle(`rgba(${lineRGB}, ${opacity})`);[代码][代码] [代码][代码]canvas.drawSmoothPath(ctx, hPoints.slice(0, 2));[代码][代码] [代码][代码]canvas.drawSmoothPath(ctx, lPoints.slice(0, 2));[代码][代码] [代码][代码]ctx.setLineDash([2, 2]);[代码][代码] [代码][代码]canvas.drawLine(ctx, [hPoints[idx], lPoints[idx]]); [代码][代码] [代码][代码]ctx.setLineDash([1, 0]);[代码][代码] [代码][代码]canvas.drawCircle(ctx, circles.slice(0, 2));[代码] [代码] [代码][代码]// 实部[代码][代码] [代码][代码]ctx.setLineDash([1, 0]);[代码][代码] [代码][代码]ctx.setStrokeStyle(`rgba(${lineRGB}, 1)`);[代码][代码] [代码][代码]canvas.drawSmoothPath(ctx, hPoints.slice(1));[代码][代码] [代码][代码]canvas.drawSmoothPath(ctx, lPoints.slice(1));[代码][代码] [代码][代码]canvas.drawCircle(ctx, circles.slice(2));[代码] [代码] [代码][代码]ctx.draw([代码][代码]true[代码][代码], () => {[代码][代码] [代码][代码]canvas.toImage(ctx, CANVAS_ID, that).then(path => {[代码][代码] [代码][代码]that.setData({[代码][代码] [代码][代码]canvasToImg: path[代码][代码] [代码][代码]});[代码][代码] [代码][代码]utils.clearAndSaveImage(IMG_KEY, path);[代码][代码] [代码][代码]});[代码][代码] [代码][代码]})[代码] 是不是不能统一的执行draw操作,需要每执行完一步都执行draw然后在执行下一步? 类似: 画上虚线 -> draw 画下虚线 -> draw 画中虚线 -> draw 画半透明圆 -> draw 画上实线 -> draw 画下实线 -> draw 画纯色圆 -> draw 这样操作的话是不是性能不太好啊?