CSS3边框半径到HTML5 Canvas

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,红色相同.

我的问题很简单,如何在画布中重现红色和蓝色?

最好的祝福.

Lok*_*tar 6

下面的函数非常接近。虽然如果您使用大于宽度和高度的值,您将会遇到问题。

现场演示

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)