Html5 canvas 绘制一个带有填充颜色和单个边框的矩形

Html5 canvas 绘制一个带有填充颜色和单个边框的矩形,html5-canvas,Html5 Canvas,如何使用填充颜色和每边4种不同的边框颜色绘制画布矩形?不幸的是,您不能像使用css那样绘制矩形的边框。 可以使用stroke()方法,但它只为每一侧绘制一种颜色的“边框”。 因此,我想,您可以通过在矩形附近绘制线条来手动绘制边框。不幸的是,您无法像使用css那样绘制矩形的边框。 可以使用stroke()方法,但它只为每一侧绘制一种颜色的“边框”。 因此,我想,您可以通过在矩形附近绘制线条来手动绘制边框。您可以向canvas.context添加一个新方法来绘制多色矩形。 您可以通过canvas.

如何使用填充颜色和每边4种不同的边框颜色绘制画布矩形?

不幸的是,您不能像使用css那样绘制矩形的边框。 可以使用stroke()方法,但它只为每一侧绘制一种颜色的“边框”。
因此,我想,您可以通过在矩形附近绘制线条来手动绘制边框。

不幸的是,您无法像使用css那样绘制矩形的边框。 可以使用stroke()方法,但它只为每一侧绘制一种颜色的“边框”。
因此,我想,您可以通过在矩形附近绘制线条来手动绘制边框。

您可以向canvas.context添加一个新方法来绘制多色矩形。

您可以通过canvas.context的原型在其上定义一个新方法:

CanvasRenderingContext2D.prototype.myNewMethod = function(){ ... };
在新方法中,可以使用任何上下文绘制命令来绘制所需的形状

请注意,在myNewMethod中,“this”指的是canvas.context,因此您可以这样绘制:

this.lineTo(x,y)    // not context.lineTo
除了斜接的侧边笔划外,您的奇特矩形是一个相当简单的图形

每个侧冲程绘制为填充梯形:

function trapezoid(context,color,x1,y1,x2,y2,x3,y3,x4,y4){
    context.beginPath();
    context.moveTo(x1,y1);
    context.lineTo(x2,y2);
    context.lineTo(x3,y3);
    context.lineTo(x4,y4);
    context.closePath();
    context.fillStyle=color;
    context.fill();
}
您奇特的新矩形方法(rainbowRect)的调用与context.fillRect类似

context.rainbowRect(100,50,100,50,"gold","red","blue","green","purple");
下面是一个完整的示例:

$(函数(){
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
//向上下文原型添加rainbowRect函数
//此方法与context.fillRect一样单独使用
//此方法未在context.beginPath中使用
//注意:在代码中使用此添加之前,必须始终运行此添加
CanvasRenderingContext2D.prototype.rainbowRect=函数(x、y、w、h、fillColor、tColor、rColor、bColor、lColor){
//如果未提供fillStyle,请使用现有fillStyle
fillColor=fillColor | | this.fillStyle;
//如果未提供任何strokeStyle,请使用现有strokeStyle
var ss=此.strokeStyle;
t颜色=t颜色| ss;
rColor=rColor | | ss;
b颜色=b颜色| | ss;
lColor=lColor | | ss;
//上下文将被修改,请保存它
这是save();
//斜接线条
this.lineJoin=“斜接”;
//辅助功能:绘制一侧的梯形“笔划”
函数梯形(上下文、颜色、x1、y1、x2、y2、x3、y3、x4、y4){
context.beginPath();
上下文。移动到(x1,y1);
lineTo(x2,y2);
lineTo(x3,y3);
lineTo(x4,y4);
closePath();
context.fillStyle=color;
context.fill();
}
//上下文线总是半进半出绘制
//因此经常使用context.lineWidth/2
var lw=此.lineWidth/2;
//边界的快捷方式变量
var L=x-lw;
var R=x+lw;
var T=y-lw;
var B=y+lw;
//顶
梯形(这个,T颜色,L,T,R+w,T,L+w,B,R,B);
//对
梯形(这个,R颜色,R+w,T,R+w,B+h,L+w,T+h,L+w,B);
//底部
梯形(这是B色,R+w,B+h,L,B+h,R,T+h,L+w,T+h);
//左
梯形(这个,L色,L,B+h,L,T,R,B,R,T+h);
//填满
this.fillStyle=fillColor;
this.fillRect(x,y,w,h);
//友善一点——总是倒带(旧的vhs参考!)
这个.restore();
//不要让这条路泄漏
this.beginPath();
//链子
返回(本);
};
//测试
ctx.线宽=20;
ctx.rainbowRect(100,50100,50,“金”、“红”、“蓝”、“绿”、“紫”);
}); // end$(函数(){})
body{背景色:象牙;}
#画布{边框:1px纯红;}

您可以向canvas.context添加一个新方法来绘制多色矩形。

您可以通过canvas.context的原型在其上定义一个新方法:

CanvasRenderingContext2D.prototype.myNewMethod = function(){ ... };
在新方法中,可以使用任何上下文绘制命令来绘制所需的形状

请注意,在myNewMethod中,“this”指的是canvas.context,因此您可以这样绘制:

this.lineTo(x,y)    // not context.lineTo
除了斜接的侧边笔划外,您的奇特矩形是一个相当简单的图形

每个侧冲程绘制为填充梯形:

function trapezoid(context,color,x1,y1,x2,y2,x3,y3,x4,y4){
    context.beginPath();
    context.moveTo(x1,y1);
    context.lineTo(x2,y2);
    context.lineTo(x3,y3);
    context.lineTo(x4,y4);
    context.closePath();
    context.fillStyle=color;
    context.fill();
}
您奇特的新矩形方法(rainbowRect)的调用与context.fillRect类似

context.rainbowRect(100,50,100,50,"gold","red","blue","green","purple");
下面是一个完整的示例:

$(函数(){
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
//向上下文原型添加rainbowRect函数
//此方法与context.fillRect一样单独使用
//此方法未在context.beginPath中使用
//注意:在代码中使用此添加之前,必须始终运行此添加
CanvasRenderingContext2D.prototype.rainbowRect=函数(x、y、w、h、fillColor、tColor、rColor、bColor、lColor){
//如果未提供fillStyle,请使用现有fillStyle
fillColor=fillColor | | this.fillStyle;
//如果未提供任何strokeStyle,请使用现有strokeStyle
var ss=此.strokeStyle;
t颜色=t颜色| ss;
rColor=rColor | | ss;
b颜色=b颜色| | ss;
lColor=lColor | | ss;
//上下文将被修改,请保存它
这是save();
//斜接线条
this.lineJoin=“斜接”;
//辅助功能:绘制一侧的梯形“笔划”
函数梯形(上下文、颜色、x1、y1、x2、y2、x3、y3、x4、y4){
context.beginPath();
上下文。移动到(x1,y1);
lineTo(x2,y2);
lineTo(x3,y3);
lineTo(x4,y4);
closePath();
context.fillStyle=color;
context.fill();
}
//上下文线总是半进半出绘制
//因此经常使用context.lineWidth/2
var lw=此.lineWidth/2;
//边界的快捷方式变量
var L=x-lw;
var R=x+lw;
var T=y-lw;
v