JCanvas: การลบ Canvas ไม่ได้ลบองค์ประกอบที่ลากได้

ฉันต้องการปรับปรุงแอปพลิเคชันการวาดภาพที่ฉันสร้างด้วย JS โดยให้ผู้ใช้สามารถวาดรูปทรงต่างๆ ได้ ฉันต้องการทำให้ผู้ใช้สะดวกโดยอนุญาตให้พวกเขาลากรูปร่างเหล่านี้ไปรอบๆ ดังนั้นฉันจึงใช้ jCanvas เนื่องจากมีวิธีง่ายๆ ในการลากรูปร่าง:

$("#can").drawRect({
   draggable: true,
   fillStyle: "#000",
   width: 100, height: 100,
   x: 100,
   y: 100,
});

ปัญหาคือ ฉันต้องการฟังก์ชันเพื่อลบมันอีกครั้ง ดังนั้นฉันจึงสร้างสคริปต์นี้:

<script>
   $("#can").drawRect({
      draggable: true,
      fillStyle: "#000",
      width: 100, height: 100,
      x: 100,
      y: 100,
   });

   $("#erase").click(function () {
      $("#can").clearCanvas();
   });
</script>
<canvas id="can" width="200px" height="150px"></canvas>
<button id="erase">Clear Canvas</button>

แม้ว่าสิ่งนี้จะไม่ทำงานก็ตาม เมื่อฉันลบ ทุกอย่างจะเคลียร์ในตอนแรก แต่เมื่อฉันพยายามวาดบนผืนผ้าใบ รูปร่างก็จะปรากฏขึ้นอีกครั้ง

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

มีวิธีเคลียร์หุ่นให้หายชั่วนิรันดร์มั้ย? หรือฉันต้องโหลดหน้านี้ซ้ำจึงจะใช้งานได้?

ขอบคุณล่วงหน้า


person nicom    schedule 22.02.2021    source แหล่งที่มา
comment
นี่คือรหัสทั้งหมดของคุณเหรอ? คุณใช้เลเยอร์หรือไม่?   -  person Luis Gustavo Araujo    schedule 22.02.2021
comment
ใช่ นั่นคือรหัสทั้งหมดของฉัน ฉันไม่ใช้เลเยอร์เนื่องจากฉันไม่สามารถเข้าใจวิธีการทำงานของมันได้   -  person nicom    schedule 22.02.2021


คำตอบ (1)


คุณไม่ได้ใช้ Layer อย่างชัดเจน แต่เมื่อคุณตั้งค่าคุณสมบัติการลาก Canvas จะสร้างเลเยอร์:

เลเยอร์สามารถลากได้โดยใช้คุณสมบัติที่ลากได้

https://projects.calebevans.me/jcanvas/docs/draggableLayers/

ดังนั้น clearCanvas จึงไม่เหมาะ:

วิธีการนี้ไม่ควรใช้หากคุณใช้ jCanvas Layer API เนื่องจาก API จะจัดการการวาดใหม่ให้คุณในหลายกรณี และหากคุณพยายามล้างแคนวาส เลเยอร์ของคุณจะถูกวาดใหม่โดย jCanvas ในที่สุดเมื่อเห็นว่าจำเป็น

คุณต้องลบเลเยอร์ออก:

$('canvas').removeLayer(0);

or

$('canvas').removeLayers();

ดูตัวเลือกเพิ่มเติมใน Doc: https://projects.calebevans.me/jcanvas/docs/manipulateLayers/

หากสิ่งนี้ช่วยคุณได้ โปรดตรวจสอบคำตอบของฉันว่าถูกต้องหรือโหวต!

person Luis Gustavo Araujo    schedule 22.02.2021