HTML5 캔버스가 중심이 아닌 호의 왼쪽 상단에서 그려지도록하려면 다음 코드를 어떻게 변경합니까?HTML5 Canvas - 왼쪽 상단에서 원을 그립니다.
내가 현재 가지고 :
function drawCircle(e) {
var oe = e.originalEvent || e;
ctx.beginPath();
ctx.arc(start.x, start.y + 10, oe.pageX - start.x - offset.left, 0, 2 * Math.PI, false);
ctx.stroke();
ctx.closePath();
}
나는 다음과 바이올린 (편의를 위해 아래 코드)를이 - 당신이에 그리기 시작하면, 원형이 잘 그려 그러나 당신이 두는 곳의 중심에서 그립니다 당신의 마우스, 바깥 쪽 :
http://jsfiddle.net/g4zxp/
왼쪽 위부터 아래로 원을 드래그하고 싶습니다만, 수학을 이해할 수 없습니다! 나는 중심점을 계산하고 계속 변경해야한다는 것을 알고있다.
아이디어가 있으십니까?
감사
코드를 다음과 같이
HTML :
<canvas width="200" height="200"></canvas>
자바 스크립트/jQuery를 :
$(function() {
var $canvas = $('canvas'),
canvas = $canvas.get(0),
offset = $canvas.offset(),
ctx,
drawing = false,
start = {
x: null,
y: null
};
function init() {
if (canvas.getContext) {
ctx = canvas.getContext('2d');
ctx.lineJoin = 'round';
ctx.lineCap = 'round';
ctx.strokeStyle = '#000000';
ctx.lineWidth = 5;
}
}
function startDrawing(e) {
var oe = e.originalEvent || e;
e.preventDefault();
drawing = true;
start.x = Math.floor(oe.pageX - offset.left);
start.y = Math.floor(oe.pageX - offset.left);
}
function continueDrawing(e) {
e.preventDefault();
if (!drawing) {
return;
}
clearCanvas();
drawCircle(e);
}
function endDrawing(e) {
e.preventDefault();
drawing = false;
}
function clearCanvas() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
function drawCircle(e) {
var oe = e.originalEvent || e;
ctx.beginPath();
ctx.arc(start.x, start.y + 10, oe.pageX - start.x - offset.left, 0, 2 * Math.PI, false);
ctx.stroke();
ctx.closePath();
}
$canvas.on('touchstart mousedown', function (e) {
startDrawing(e);
});
$canvas.on('touchmove mousemove', function (e) {
continueDrawing(e);
});
$canvas.on('touchend mouseup', function (e) {
endDrawing(e);
});
init();
});
그런데 실제로 프로젝트에서 jQuery가 필요하지 않습니다. 당신은 단지 두어 번만 사용하고 바닐라 js로 작성하면 쉽게 쓸 수 있습니다 –
이것은 완벽합니다 - 고마워요! 동의했다. 나는 게으르다. (내 플러그인에 조금 더있어, jQuery를 좀 더 공정하게 사용한다.) 그러나 동의했다. 내가 한 모든 것은 바닐라 JS로 훨씬 더 가볍다. – keldar
와우, 너 너무 멀었다! 훨씬 간단한 대답 버디! 내 대답을 확인하십시오. – WebWanderer