여러분이 사용하고 계신 브라우저는 HTML5를 지원하지 않기 때문에 몇몇 요소가 제대로 보이도록 JScript를 사용하고 있습니다. 하지만 여러분의 브라우저 설정에서 스크립트 기능이 꺼져있으므로, 현재 페이지를 제대로 확인하시려면 스크립트 기능을 켜주셔야 합니다. HTML Canvas - clearRect() 메서드

HTML Canvas – clearRect() 메서드

2개월전 작성

Canvas clearRect() 메서드

Canvas에서 clearRect() 메서드는 지정된 직사각형 영역 내의 모든 픽셀을 투명하게 지우는 기능을 한다.

기본 문법

clearRect() 메서드의 기본 구문은 다음과 같다.

context.clearRect(x, y, width, height);
매개변수 설명
x 지울 사각형 영역의 왼쪽 상단 모서리 x 좌표
y 지울 사각형 영역의 왼쪽 상단 모서리 y 좌표
width 지울 사각형 영역의 너비(픽셀)
height 지울 사각형 영역의 높이(픽셀)

예제: 사각형 내부 지우기

다음 예제는 빨간색 사각형을 그린 후 그 내부에 작은 영역을 투명하게 지운다.

<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
브라우저가 HTML5 Canvas를 지원하지 않습니다.
</canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(20, 20, 150, 100);
ctx.clearRect(50, 50, 50, 30);
</script>

위 예제에서 fillRect() 메서드로 먼저 빨간색 사각형을 그린 다음, clearRect() 메서드로 그 내부에 작은 투명한 창을 만든다. clearRect() 메서드로 지워진 영역은 완전히 투명해져서 캔버스의 배경색이나 그 아래에 있는 요소가 보이게 된다.

전체 캔버스 지우기

전체 캔버스를 지우려면 캔버스의 전체 크기와 동일한 매개변수로 clearRect()를 호출하면 된다.

<canvas id="myCanvas2" width="300" height="150" style="border:1px solid #d3d3d3;">
브라우저가 HTML5 Canvas를 지원하지 않습니다.
</canvas>
<script>
var c = document.getElementById("myCanvas2");
var ctx = c.getContext("2d");
ctx.fillStyle = "green";
ctx.fillRect(10, 10, 280, 130);
function clearCanvas() {
ctx.clearRect(0, 0, c.width, c.height);
}
setTimeout(clearCanvas, 2000);
</script>

이 예제는 먼저 녹색 사각형을 그린 다음 2초 후에 전체 캔버스를 지운다.

복잡한 도형에서 영역 지우기

복잡한 도형을 그린 후 특정 부분만 지울 수도 있다.

<canvas id="myCanvas3" width="300" height="150" style="border:1px solid #d3d3d3;">
브라우저가 HTML5 Canvas를 지원하지 않습니다.
</canvas>
<script>
var c = document.getElementById("myCanvas3");
var ctx = c.getContext("2d");
ctx.fillStyle = "blue";
ctx.fillRect(20, 20, 260, 110);
ctx.fillStyle = "yellow";
ctx.beginPath();
ctx.arc(150, 75, 50, 0, 2 * Math.PI);
ctx.fill();
ctx.clearRect(100, 50, 100, 50);
</script>

이 예제에서는 파란색 사각형과 노란색 원을 그린 후, clearRect()를 사용하여 두 도형이 겹치는 영역의 일부를 지운다.

애니메이션에서의 활용

clearRect() 메서드는 캔버스 애니메이션을 만들 때 특히 유용하다. 각 프레임을 그리기 전에 캔버스를 지우는 데 사용된다.

<canvas id="myCanvas4" width="300" height="150" style="border:1px solid #d3d3d3;">
브라우저가 HTML5 Canvas를 지원하지 않습니다.
</canvas>
<script>
var c = document.getElementById("myCanvas4");
var ctx = c.getContext("2d");
var x = 20;
function draw() {
ctx.clearRect(0, 0, c.width, c.height);
ctx.fillStyle = "red";
ctx.fillRect(x, 50, 50, 50);
x += 2;
if (x > c.width) {
x = -50;
}
requestAnimationFrame(draw);
}
draw();
</script>

이 예제는 캔버스에서 오른쪽으로 이동하는 빨간색 정사각형을 애니메이션으로 보여준다. 각 프레임마다 clearRect()로 전체 캔버스를 지운 다음 새로운 위치에 사각형을 다시 그린다.

복잡한 영역 지우기

전체 사각형 영역이 아닌 더 복잡한 모양을 지우려면 clearRect()와 clip()을 조합하여 사용할 수 있다.

<canvas id="myCanvas5" width="300" height="150" style="border:1px solid #d3d3d3;">
브라우저가 HTML5 Canvas를 지원하지 않습니다.
</canvas>
<script>
var c = document.getElementById("myCanvas5");
var ctx = c.getContext("2d");
ctx.fillStyle = "purple";
ctx.fillRect(0, 0, c.width, c.height);
ctx.save();
ctx.beginPath();
ctx.arc(150, 75, 50, 0, 2 * Math.PI);
ctx.clip();
ctx.clearRect(0, 0, c.width, c.height);
ctx.restore();
</script>

이 예제에서는 전체 캔버스를 보라색으로 채운 다음, 원형 영역을 지정하고 clip() 메서드로 클리핑 영역을 설정한 후 clearRect()로 해당 영역만 지운다. 결과적으로 보라색 배경에 원형 구멍이 뚫린 효과를 얻을 수 있다.

💡 clearRect 활용 팁:
• 일반적으로 애니메이션을 시작하기 전에 캔버스를 초기화하는 데 사용한다
• 부분적으로 도형을 지우려면 정확한 좌표 계산이 필요하다
• 복잡한 모양을 지우려면 clearRect()와 clip()을 함께 사용한다

이미지와 함께 활용하기

clearRect()를 이용해 이미지의 특정 부분을 투명하게 만들 수도 있다.

<canvas id="myCanvas6" width="300" height="150" style="border:1px solid #d3d3d3;">
브라우저가 HTML5 Canvas를 지원하지 않습니다.
</canvas>
<script>
var c = document.getElementById("myCanvas6");
var ctx = c.getContext("2d");
var img = new Image();
img.onload = function() {
ctx.drawImage(img, 0, 0, c.width, c.height);
ctx.clearRect(100, 50, 100, 50);
};
img.src = "landscape.jpg";
</script>

이 예제에서는 이미지를 캔버스에 로드한 다음 clearRect()를 사용하여 이미지의 일부를 투명하게 만든다.

clearRect() 메서드는 Canvas에서 특정 영역을 지우는 간단하면서도 강력한 방법이다. 애니메이션, 그래픽 편집, 인터랙티브 요소 만들기 등 다양한 상황에서 활용할 수 있다.

참고
Mingg`s Diary
밍구
공부 목적 블로그