나는 큰 원의 바깥 둘레 주위에 점을 마우스로 드래그하려고 시도하고 그 점을 그 바깥 쪽 둘레의 둘레 주위에 두꺼운 선을 표시하는 것처럼 보입니다. 나는 점 뒤에있는 바깥 쪽 선을 긋는 것 외에는 모든 것을 얻을 수 있습니다. 나는 많은 아이디어를 연구하고 내 자신의 많은 시도했지만 라인은 여전히 "발견"결과를 생성합니다. 여기 내가 시도하고있는 것을 보여주는 이미지가 있습니다. MounseDrag Scribed Line 제 질문을 읽어 주셔서 감사합니다. :-)캔버스에서 원형 선을 그을음
<script type="text/javascript">
var canvas1 = document.getElementById("canvas1"),
canvas2 = document.getElementById("canvas2"),
c1 = canvas1.getContext("2d"),
c2 = canvas2.getContext("2d"),
dot = 7,
started = false,
width = 350,
height = 350,
radians = 0,
cRad = 165, // Circle Radius
cord = {mX:0, mY:0, csX:0, snY:0, x:0, y:0},
init = function(){
cord.mX = 0;
cord.mY = 0;
cord.csX = width /2 + cRad;
cord.snY = height /2;
cord.x = width /2;
cord.y = height /2;
};
init();
canvas1.width = width;
canvas1.height = height;
canvas2.width = width;
canvas2.height = height;
canvas1.addEventListener("mousemove", function(event) {
cord.mX = event.clientX - canvas1.offsetLeft;
cord.mY = event.clientY - canvas1.offsetTop;
});
canvas1.addEventListener("mousedown", function(event) {
if (started) {
started = false;
} else {
started = true;
render();
};
});
function update() {
radians = Math.atan2(cord.mY - width/2, cord.mX - height/2);
cord.csX = width/2 - Math.cos(radians) * cRad * -1;
cord.snY = height/2 - Math.sin(radians) * cRad * -1;
};
function outerTheta() {
c2.beginPath();
c2.arc(cord.csX, cord.snY, 3, 0, Math.PI * 2);
c2.closePath();
c2.fillStyle = "#000";
c2.fill();
};
function render() {
c1.clearRect(0, 0, width, height);
c1.beginPath();
c1.moveTo(cord.x, cord.y);
c1.lineTo(cord.csX, cord.snY);
c1.lineWidth = 3;
c1.strokeStyle = "#000";
c1.stroke();
c1.beginPath(); //<---------------------------------- Drag-Dot
c1.arc(cord.csX, cord.snY, dot, 0, Math.PI * 2);
c1.closePath();
c1.fillStyle = "#000";
c1.fill();
if(started){
update();
outerTheta();
requestAnimationFrame(render);
};
};
render();
</script>
데모의 경우 외부 Fiddles가 아닌 Stackoverflow의 내부 [Snippets] (https://blog.stackoverflow.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/)를 사용하십시오. :-) – markE
시간을 내서 도와 주셔서 감사합니다. 정보. 당신이 제공 한 것은 나를 위해 매우 눈을 뜨고 있습니다. 나는 명백한 무엇인가 놓치고 있었지만. 나는 문제가 실제로 해결하기가 어렵다는 것을 알 수 있으며 이것은 매우 도움이 될 것입니다. 나는 그걸 좀 더 연구하고 내가 그걸로 할 수있는 것을 보게 될 것이다. 다시 한 번 고마워! –