2012-05-07 29 views

Trả lời

41

Sử dụng globalAlpha. Bạn cũng sẽ phải vẽ bằng fillRect. clearRect chỉ xóa các pixel. Nó không thể xóa một phần vì vậy bạn sẽ phải sử dụng fillRect hoặc các bản vẽ nguyên thủy khác.

từ w3schools.com:

ctx.globalAlpha = 0.2; 
    ctx.fillRect(50,50,75,50); 
    ctx.globalAlpha = 1.0; 
+0

này làm cho toàn bộ vải trong suốt (trên Chrome ít nhất) –

+0

Brian, nó không xóa toàn bộ vải, chỉ có kích thước và vị trí bạn cho nó . Đó là những gì 4 con số đó; đầu tiên hai là X phối hợp trên vải, sau đó điều phối Y., và sau đó kích thước X và Y của rect bạn muốn xóa. (Hãy nhớ rằng giá trị Y thay vì lớn hơn khi chúng giảm xuống, trong Canvas) –

+4

Lưu ý rằng bạn sẽ cần phải gọi 'ctx.globalAlpha = 1;' sau hai dòng đó để ngăn chặn các cuộc gọi vẽ tiếp theo (thậm chí trước đó những người, tin hay không) cũng không được minh bạch một phần. –

46

ClearRect loại bỏ những gì đã có và lá nó trống. Cách tốt nhất là sử dụng giá trị rgba fillStyle vì nó sẽ chỉ tạo hình chữ nhật (hoặc bất kỳ hình dạng nào khác mà bạn đang vẽ) trong suốt. Mã này sẽ là:

ctx.fillStyle = 'rgba(225,225,225,0.5)'; 
ctx.fillRect(25,72,32,32); 

(nhờ How to change the opacity (alpha, transparency) of an element in a canvas element after it has been drawn?)

+4

Tôi thích điều này hơn câu trả lời đã chọn vì nó không ảnh hưởng đến toàn bộ bản vẽ sau khi sử dụng nó. –

+0

Bạn có thể lưu và khôi phục ngữ cảnh để nó không ảnh hưởng đến toàn cầu bằng cách sử dụng 'ctx.save()' và 'ctx.restore()' quấn quanh các thay đổi ngữ cảnh khác của bạn. –

+0

Tôi thích điều này phổ biến nhất vì nó là cụ thể hơn: nói về sự minh bạch của điền (tôi muốn 'làm sạch' một hình chữ nhật), không phải là minh bạch của bất kỳ hoạt động. Hai giải pháp này yêu cầu 4 dòng (vì ctx.save() và ctx.restore() để bảo toàn ngữ cảnh). Dù sao, hai giải pháp là tốt cho tôi. – ddcovery

Các vấn đề liên quan