Bạn làm điều đó bằng cách làm cho một con đường duy nhất với hai vòng cung.
Bạn vẽ một vòng tròn theo chiều kim đồng hồ, sau đó vẽ vòng tròn thứ hai theo chiều ngược chiều kim đồng hồ. Tôi sẽ không đi sâu vào chi tiết của nó, nhưng cách con đường được xây dựng sẽ biết đây là một lý do để không điền vào phần đó của con đường. Để biết thêm chi tiết về những gì bạn đang làm, bạn có thể this wiki article.
Điều tương tự cũng sẽ hiệu quả nếu bạn vẽ hình chữ nhật "có khung". Bạn vẽ một ô một chiều (theo chiều kim đồng hồ), sau đó vẽ hộp bên trong theo cách khác (ngược chiều kim đồng hồ) để có hiệu ứng.
Dưới đây là mã cho một chiếc bánh rán:
var can = document.getElementById('canvas1');
var ctx = can.getContext('2d');
// Pay attention to my last argument!
//ctx.arc(x,y,radius,startAngle,endAngle, anticlockwise);
ctx.beginPath()
ctx.arc(100,100,100,0,Math.PI*2, false); // outer (filled)
ctx.arc(100,100,55,0,Math.PI*2, true); // inner (unfills it)
ctx.fill();
Ví dụ:
http://jsfiddle.net/Hnw6a/
Vẽ chỉ là một "phân khúc" của nó có thể được thực hiện bằng cách làm cho con đường nhỏ (bạn có thể cần phải sử dụng beziers thay vì arc), hoặc bằng cách sử dụng một vùng cắt. Nó thực sự phụ thuộc vào chính xác như bạn muốn có một "phân khúc"
Dưới đây là một ví dụ: http://jsfiddle.net/Hnw6a/8/
// half doughnut
ctx.beginPath()
ctx.arc(100,100,100,0,Math.PI, false); // outer (filled)
ctx.arc(100,100,55,Math.PI,Math.PI*2, true); // outer (unfills it)
ctx.fill();
aha! điều này trông giống như những gì tôi cần, cảm ơn! –
Thay vì làm đầy và không làm đầy, tại sao không chỉ đột quỵ với chiều rộng chất béo? – Phrogz
@Phrogz Bạn có thể muốn đường viền và tô màu là các màu khác nhau. –