Ich muss eine Funktion haben, um mehrere Kreise auf Leinwand zu zeichnen, beginnend mit mousedown bei center = x, y und ziehen Maus auf deltaX, deltaY und somit Radius r, für jeden Kreis. Die Kreise können keine Füllung haben (müssen transparent sein), damit der Benutzer deutlich sehen kann, wo die Kreise abschneiden. Mein aktueller Code zeichnet Kreise, während die Maus gezogen wird, und das wird erwartet, aber sie hinterlässt auch diese zusätzlichen Kreise. Ich muss nur den Kreis auf mouseup verlassen. Jede Hilfe wird geschätzt. Vielen Dank :).Javascript HTML5 Leinwand Zeichnung transparente Kreise
<html>
<head>
</head>
<body style="margin:0">
<canvas id="canvas" width="500" height="500" style="border:1px solid"></canvas>
<script>
var canvas=document.getElementById('canvas');
var context=canvas.getContext('2d');
var radius=50;
var nStartX = 0;
var nStartY = 0;
var bIsDrawing = false;
var putPoint = function(e){
nStartX = e.clientX;nStartY = e.clientY;
bIsDrawing = true;
radius = 0;
}
var drawPoint = function(e){
if(!bIsDrawing)
return;
var nDeltaX = nStartX - e.clientX;
var nDeltaY = nStartY - e.clientY;
radius = Math.sqrt(nDeltaX * nDeltaX + nDeltaY * nDeltaY)
context.beginPath();
context.arc(nStartX, nStartY, radius, 0, Math.PI*2);
context.strokeStyle="#000000";
//context.fillStyle="#FFFFFF";
context.fillStyle = 'rgba(0, 0, 0, 0)';
context.stroke();
context.fill();
}
var stopPoint = function(e){
//context.clip();
//context.clearRect(0, 0, canvas.width, canvas.height);
bIsDrawing = false;
}
canvas.addEventListener('mousedown',putPoint);
canvas.addEventListener('mousemove',drawPoint);
canvas.addEventListener('mouseup',stopPoint);
</script>
</body>
</html>
Verwenden Sie zwei Leinwand. Auf dem * obersten * zeichnest du den aktuell behandelten Kreis und löschst ihn im Intervall. Auf dem * unteren * zeichnest du das Endergebnis ohne zu löschen. Oder verfolgen Sie alle Kreise und streichen Sie ständig neu. – Yoshi
Ich habe auch eine Geige dafür, wenn Ihr Kreis Ellipse sein kann http://jsfiddle.net/xXqsu/2/ –