简体   繁体   English

绘制多个可拖动圆圈HTML5画布

[英]Draw multiple draggable circle HTML5 Canvas

I have to draw mutiple draggable circles on an HTML5 canvas, and also I should move the circles after creating it. 我必须在HTML5画布上绘制多个可拖动的圆圈,并且在创建它之后也应该移动圆圈。 But while dragging to draw there are multiple frames created. 但是在拖动以绘制时会创建多个框架。 How can I remove it without reloading the page? 如何在不重新加载页面的情况下将其删除?

Here is a demo of my code: 这是我的代码的演示:

 var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var canvasOffset = $("#canvas").offset(); var offsetX = canvasOffset.left; var offsetY = canvasOffset.top; var startX; var startY; var isDown = false; function handleMouseDown(e) { e.preventDefault(); // e.stopPropagation(); startX = parseInt(e.clientX - offsetX); startY = parseInt(e.clientY - offsetY); isDown = true; } function handleMouseUp(e) { if (!isDown) { return; } e.preventDefault(); // e.stopPropagation(); isDown = false; } function handleMouseOut(e) { if (!isDown) { return; } e.preventDefault(); //e.stopPropagation(); isDown = false; } function handleMouseMove(e) { if (!isDown) { return; } e.preventDefault(); //e.stopPropagation(); mouseX = parseInt(e.clientX - offsetX); mouseY = parseInt(e.clientY - offsetY); if (isDown) { var dx = Math.abs(startX - mouseX); var dy = Math.abs(startY - mouseY); var midX = (startX + mouseX) / 2; var midY = (startY + mouseY) / 2; var r = Math.sqrt(dx * dx + dy * dy) / 2; alert(midX, midY); draw(midX, midY, r); } } function draw(midX, midY, r) { // ctx.save(); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.beginPath(); ctx.arc(midX, midY, r, 0, 2 * Math.PI, false); //ctx.restore(); //ctx.stroke(); ctx.fillStyle = getRandomColor(); ctx.fill(); } function getRandomColor() { var letters = '0123456789ABCDEF'.split(''); var color = '#'; for (var i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } return color; } $("#canvas").mousedown(function(e) { handleMouseDown(e); }); $("#canvas").mousemove(function(e) { handleMouseMove(e); }); $("#canvas").mouseup(function(e) { handleMouseUp(e); }); $("#canvas").mouseout(function(e) { handleMouseOut(e); }); 
  #canvas { border: 1px solid blue; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <h4>Drag to draw circles</h4> <canvas id="canvas" width=600 height=400></canvas> <button onclick="location.reload()">Reset</button> 

You can clear the canvas without reloading the page by using ctx.clearRect() like so: 您可以像这样使用ctx.clearRect()来清除画布,而无需重新加载页面:

ctx.clearRect(0, 0, canvas.width, canvas.height);

Working Live Demo: 工作现场演示:

 var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var canvasOffset = $("#canvas").offset(); var offsetX = canvasOffset.left; var offsetY = canvasOffset.top; var startX; var startY; var isDown = false; function handleMouseDown(e) { e.preventDefault(); // e.stopPropagation(); startX = parseInt(e.clientX - offsetX); startY = parseInt(e.clientY - offsetY); isDown = true; } function handleMouseUp(e) { if (!isDown) { return; } e.preventDefault(); // e.stopPropagation(); isDown = false; } function handleMouseOut(e) { if (!isDown) { return; } e.preventDefault(); //e.stopPropagation(); isDown = false; } function handleMouseMove(e) { if (!isDown) { return; } e.preventDefault(); //e.stopPropagation(); mouseX = parseInt(e.clientX - offsetX); mouseY = parseInt(e.clientY - offsetY); if(isDown) { var dx = Math.abs(startX - mouseX); var dy = Math.abs(startY - mouseY); var midX = (startX + mouseX) / 2; var midY = (startY + mouseY) / 2; var r = Math.sqrt(dx * dx + dy * dy) / 2; //alert(midX,midY); draw(midX,midY,r); } } function draw(midX,midY,r) { // ctx.save(); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.beginPath(); ctx.arc(midX, midY, r, 0, 2 * Math.PI, false); //ctx.restore(); //ctx.stroke(); ctx.fillStyle = getRandomColor(); ctx.fill(); } function getRandomColor() { var letters = '0123456789ABCDEF'.split(''); var color = '#'; for (var i = 0; i < 6; i++ ) { color += letters[Math.floor(Math.random() * 16)]; } return color; } $("#canvas").mousedown(function (e) { handleMouseDown(e); }); $("#canvas").mousemove(function (e) { handleMouseMove(e); }); $("#canvas").mouseup(function (e) { handleMouseUp(e); }); $("#canvas").mouseout(function (e) { handleMouseOut(e); }); document.getElementById("clear").onclick = function() { ctx.clearRect(0, 0, canvas.width, canvas.height); }; 
 #canvas { border:1px solid blue; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <h4>Drag to draw circles</h4> <canvas id="canvas" width=600 height=400></canvas> <button id="clear">Reset</button> 

JSFiddle Version: https://jsfiddle.net/j9y7fqyx/ JSFiddle版本: https ://jsfiddle.net/j9y7fqyx/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM