ฉันจะสร้างแคนวาสโปร่งใสใน html5 ได้อย่างไร


123

ฉันจะทำให้ผ้าใบโปร่งใสได้อย่างไร ฉันจำเป็นต้องทำเพราะฉันต้องการวางสองผืนผ้าใบทับกัน

คำตอบ:


194

แคนวาสจะโปร่งใสโดยค่าเริ่มต้น

ลองตั้งค่าภาพพื้นหลังของหน้าแล้ววางผ้าใบทับ หากไม่มีสิ่งใดวาดลงบนผืนผ้าใบคุณจะเห็นพื้นหลังของหน้าได้อย่างเต็มที่

คิดว่าผืนผ้าใบก็เหมือนกับภาพวาดบนแผ่นกระจก


6
Canvas มีพื้นหลังเป็นสีดำบนมือถือดังนั้นการจัดวางภาพแคนวาสแบบหลายชั้นจึงใช้ไม่ได้ (อย่างน้อยก็ใน Chrome สำหรับ Android)
รัก

11
มากสำหรับมาตรฐานเช่นเคย
Triynko

6
ฉันคิดว่าคำตอบเหล่านี้ขาดประเด็น คล้ายกับคำถามข้างต้นฉันต้องการมีแคนวาสสองชั้น: อันล่างมีภาพนิ่ง แต่อันบนสุดจะมีสไปรต์เคลื่อนไหว เลเยอร์บนสุดนี้จำเป็นต้องมีพื้นหลังโปร่งใส แต่ยังต้อง "ล้าง" และวาดใหม่ทุกเฟรมภาพเคลื่อนไหว ใช่มันเริ่มโปร่งใสตามค่าเริ่มต้น แต่คุณจะรีเซ็ตเป็นแบบโปร่งใสและเริ่มเฟรมภาพเคลื่อนไหวใหม่ทุกเฟรมได้อย่างไร
J

3
นี่คือวิธีล้างแคนวาสได้ตลอดเวลา: stackoverflow.com/questions/2142535/…
Omiod

เนื่องจากคุณได้รับคะแนนโหวตจำนวนมากอย่างน้อยคุณช่วยตอบคำถามด้วยหรือไม่? คุณจะสร้างผ้าใบที่ไม่โปร่งใสได้อย่างไร?
DDD

48

ฉันเชื่อว่าคุณกำลังพยายามทำในสิ่งที่ฉันเพิ่งพยายามทำ: ฉันต้องการผืนผ้าใบซ้อนกันสองผืน ... อันล่างมีภาพนิ่งและอันบนมีสไปรต์ที่เคลื่อนไหวได้ เนื่องจากภาพเคลื่อนไหวคุณต้องล้างพื้นหลังของเลเยอร์บนสุดให้โปร่งใสเมื่อเริ่มการแสดงผลทุกเฟรมใหม่ ในที่สุดฉันก็พบคำตอบ: มันไม่ได้ใช้ globalAlpha และไม่ได้ใช้สี rgba () คำตอบง่ายๆที่มีประสิทธิภาพคือ:

context.clearRect(0,0,width,height);

45

ถ้าคุณต้องการให้รายการใด<canvas id="canvasID">โปร่งใสเสมอคุณก็ต้องตั้งค่า

#canvasID{
    opacity:0.5;
}

แต่ถ้าคุณต้องการให้องค์ประกอบบางอย่างในพื้นที่ผ้าใบโปร่งใสคุณต้องตั้งค่าความโปร่งใสเมื่อคุณวาดเช่น

context.fillStyle = "rgba(0, 0, 200, 0.5)";

ฉันกำลังมองหาความโปร่งใสของ FillStyle ขอบคุณ!
คนงาน

3
FYI: opacityการเปลี่ยนแปลงจะไม่มีผลหากมีการเติมพื้นหลังในผืนผ้าใบ
Adam Eberlin

3

เพียงตั้งค่าพื้นหลังของผ้าใบให้โปร่งใส

#canvasID{
    background:transparent;
}

1
คำตอบนี้ใช้ไม่ได้ในทุกสถานการณ์ context.clearRect (0, 0, width, height) เป็นคำตอบที่เหมาะกับฉัน
Dmitriy

2

วาดภาพสองผืนของคุณลงบนผืนผ้าใบที่สาม

ฉันมีปัญหาเดียวกันนี้และไม่มีวิธีแก้ไขใดที่สามารถแก้ปัญหาของฉันได้ ฉันมีผ้าใบทึบแสงหนึ่งผืนโดยมีผืนผ้าใบใสอีกผืนอยู่ด้านบน ผืนผ้าใบทึบแสงนั้นมองไม่เห็นอย่างสมบูรณ์ แต่มองเห็นพื้นหลังของเนื้อหาของหน้า ภาพวาดจากผืนผ้าใบใสด้านบนสามารถมองเห็นได้ในขณะที่ผืนผ้าใบทึบแสงด้านล่างไม่ปรากฏ


0

ไม่สามารถแสดงความคิดเห็นในคำตอบสุดท้ายได้ แต่การแก้ไขนั้นค่อนข้างง่าย เพียงตั้งค่าสีพื้นหลังของผ้าใบทึบแสงของคุณ:

#canvas1 { background-color: black; } //opaque canvas
#canvas2 { ... } //transparent canvas

ฉันไม่แน่ใจ แต่ดูเหมือนว่าสีพื้นหลังจะได้รับการถ่ายทอดมาจากร่างกายอย่างโปร่งใส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.