MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Desenarea cu mouse-ul

Până acum am discutat în principal despre grafica statică pe canvas. Dar putem, de asemenea, să creăm figuri dinamic, pur și simplu desenând cu cursorul mouse-ului.

Pentru aceasta, vom defini următoarea pagină:

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8" />
   <title>FDC.COM</title>
</head>
<body>
<canvas id="canvas" width="400" height="250"
   style="background-color:#eee; border: 1px solid #ccc; margin:10px;"></canvas>
<script>
const canvas = document.getElementById("canvas");
const context = canvas.getContext("2d");

const w = canvas.width;
const h = canvas.height;

const mouse = { x:0, y:0 };      // coordonatele mouse-ului
let draw = false;

// apăsarea mouse-ului
canvas.addEventListener("mousedown", function(e){
   
   mouse.x = e.pageX - this.offsetLeft;
   mouse.y = e.pageY - this.offsetTop;
   draw = true;
   context.beginPath();
   context.moveTo(mouse.x, mouse.y);
});

// mișcarea mouse-ului
canvas.addEventListener("mousemove", function(e){
   
   if(draw == true){
   
       mouse.x = e.pageX - this.offsetLeft;
       mouse.y = e.pageY - this.offsetTop;
       context.lineTo(mouse.x, mouse.y);
       context.stroke();
   }
});

// eliberarea mouse-ului
canvas.addEventListener("mouseup", function(e){
   
   mouse.x = e.pageX - this.offsetLeft;
   mouse.y = e.pageY - this.offsetTop;
   context.lineTo(mouse.x, mouse.y);
   context.stroke();
   context.closePath();
   draw = false;
});
</script>
</body>
</html>

Pentru a gestiona mișcarea mouse-ului pentru elementul canvas sunt definite trei manipulatoare - pentru apăsarea mouse-ului, pentru mișcarea acestuia și pentru eliberarea butonului mouse-ului. La apăsarea mouse-ului, setăm variabila draw ca fiind true. Adică începe desenul. De asemenea, la apăsare fixăm punctul de unde va începe desenul.

La mișcarea mouse-ului, obținem punctul în care s-a mutat cursorul și desenăm o linie. La eliberarea butonului mouse-ului, închidem calea grafică folosind metoda context.closePath() și resetăm variabila draw la false.

← Lecția anterioară Lecția următoare →