[英]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.