kra*_*ran 6 javascript canvas css3
我试图在画布中重现CSS3边框半径.
绘制圆角矩形很容易,但在CSS中,每个边框的值可能很高.
例如:
HTML
<div class="normal_radius"></div>
<div class="high_radius"></div>
<div class="high2_radius"></div>
Run Code Online (Sandbox Code Playgroud)
CSS
div { height:50px;width:50px;position:absolute;top:10px; }
.normal_radius {
border: 1px solid black;
border-radius: 5px 5px 10px 15px;
left: 10px;
}
.high_radius {
border: 1px solid red;
border-radius: 5000px 500px 100px 150px;
left: 80px;
}
.high2_radius {
border: 1px solid blue;
border-radius: 2500px 250px 50px 75px;
left: 160px;
}
Run Code Online (Sandbox Code Playgroud)
这是一个jsfiddle
黑色,正常边界半径值,我可以重现.边缘半径的红色,高值,我不知道如何重现.而蓝色,高值除以2,红色相同.
我的问题很简单,如何在画布中重现红色和蓝色?
最好的祝福.
下面的函数非常接近。虽然如果您使用大于宽度和高度的值,您将会遇到问题。
function canvasRadius(x, y, w, h, tl, tr, br, bl){
var r = x + w,
b = y + h;
ctx.beginPath();
ctx.moveTo(x+tl, y);
ctx.lineTo(r-(tr), y);
ctx.quadraticCurveTo(r, y, r, y+tr);
ctx.lineTo(r, b-br);
ctx.quadraticCurveTo(r, b, r-br, b);
ctx.lineTo(x+bl, b);
ctx.quadraticCurveTo(x, b, x, b-bl);
ctx.lineTo(x, y+tl);
ctx.quadraticCurveTo(x, y, x+tl, y);
ctx.stroke();
}
canvasRadius(10,10,50,50,5,5,10,15);
ctx.strokeStyle = "red";
canvasRadius(80,10,50,50,47,3,0,0);
ctx.strokeStyle = "blue";
canvasRadius(160,10,50,50,47,3,0,0);
Run Code Online (Sandbox Code Playgroud)