The Debugging Chronicles : "코드의 미학"
chapter6. 애니메이션을 만드는 캔버스(Canvas) 본문
chapter6. 애니메이션을 만드는 캔버스(Canvas)
sweetseonah1004 2024. 8. 29. 22:22section01. 자바스크립트로 Canvas 제어
- HTML5 캔버스의 사용법
· 캔버스는 그래픽을 그릴 수 있는 영역을 말하며, <canvas> 태그와 자바스크립트를 사용해서 웹 페이지 상에서 그래픽을 그린다.
· <canvas> 태그는 단지 그래픽을 그릴 수 있는 영역을 제공하는 컨테이너(그릇)로 실제로 그래픽을 그리기 위해서는
자바스크립트를 사용해야 한다.
· <canvas> 태그는 너비(width)와 높이(height)를 속성으로 가진다.
· 캔버스를 제어하기 위해서는 id 속성도 필요하다.
· 캔버스에 표시할 마우스 포인터의 상대적인 위치를 얻기 위해 특정 구역을 정의하는데 쓰이는 <div> 태그 안에 넣어서 사용하는 것이 좋다.
<div id="아이디명">
<canvas id="캔버스아이디명" width="너비" height="높이"></canvas>
</div>
- 캔버스 제어하기
· 만들어진 캔버스에 도형이나 그림 등을 그리거나, 그려진 것들을 움직이게 만드는 등의 제어는 자바스크립트에서 한다.
· 자바스크립트는 HTML 페이지가 모두 로드된 후에 사용되는 것이 좋기 때문에 캔버스를 제어하는 코드$(document).ready()
메소드 안에 기술한다.
· 캔버스 제어 코드가 복잡한 경우 별도의 함수를 따로 정의해서 js 파일로 작성한다.
<script>
$(document).ready(function()){
// 캔버스 제어 코드 또는 제어 메소드 호출
});
function 함수명(){ // 캔버스 제어 메소드
// 캔버스 제어 코드들
}
</script>
· 자바스크립트에서 캔버스를 제어하기 위해 필요한 2가지
1. 그림이 그려질 캔버스 영역
▸ HTML 코드 부분에서 정의한 <canvas> 태그를 자바스크립트에서 제어할 수 있도록 얻어낸다.
(id 속성 값을 사용해서 유일한 태그에 접근)
JS에서 id 속성값을 얻어내기
$(document).ready(function()){
var cvs = document.getElementDyId("id속성 값") // 1번 방법
var cvs = $("id속성 값")[0]; // 2번 방법, jQuery의 경우도 이 방법을 사용함
});
HTML
<canvas id="id속성 값" width="너비" height="높이"></canvas>
2. 그리기 작업을 위한 그래픽 2D 콘텍스트 얻어내기
▸ 그리기 작업을 위한 그래픽 2D 콘텍스트를 cvs, getContext("2d");과 같은 방법으로 얻어내서 한다.
JS
$(document).ready(function()){
var cvs = $("id속성 값")[0]; // canvas 엘리먼트 객체가 저장된 객체 변수
var ctx = cvs.getContext("2d"); // 그래픽 2D 콘텍스트 얻어내기
});
HTML
<canvas id="id속성 값" width="너비" height="높이"></canvas>
- 도형, 문자열, 이미지 그리기
▸ 캔버스는 각종 도형, 문자열 그리고 그림을 그릴 수 있는 각종 메서드를 제고한다.
▸ 그리기 메서드들은 [2D 콘텍스트 객체. 그리기 메서드()]와 같은 형태로 사용한다.
JS
$(document).ready(function()){
var cvs = $("id속성 값")[0]; // canvas 엘리먼트 객체가 저장된 객체 변수
var ctx = cvs.getContext("2d"); // 그래픽 2D 콘텍스트 얻어내기
ctx.그리기 메서드(인자들);
});
HTML
<canvas id="id속성 값" width="너비" height="높이"></canvas>
section02. 캔버스를 사용한 애니메이션
- 캔버스에서 애니메이션을 구현하는 순서
1. 캔버스 클리어
· 어떤 모양이든 그리기 전에 캔버스를 클리어하는 것이 필요하다.
· clearRect() 메서드를 사용한다.
ctx.clearRect(0, 0, 300, 300);
2. 캔버스 상태 저장
· 어떤 설정을 변경하면 캔버스 상태에 영향을 미치기 때문에 원래 상태를 저장해둬야 한다.
· save() 메서드 사용한다.
ctx.save();
3. 애니메이션으로 만들 형태 그리기
· 실제로 애니메이션에 필요한 작업들을 캔버스의 그리기 관련 메서드를 사용해서 작업한다.
ctx.drawImage(img, x, y, iWidth, iHeight);
등등...
4. 캔버스의 상태 재저장
· 새 형태를 더 그려야 할 경우 기존 상태를 재저장 한다.
· restore() 메서드를 사용한다.
ctx.restore();
- 애니메이션 제어
· 애니메이션 동작(실행) 제어함수가 필요하다.
▸ setInterval(function, delay) 메서드 : 특정 시간(delay)마다 지정한 함수(function)을 반복 실행한다.
▸ setTimeout(function, delay) : 지정한 함수(function)를 특정 시간(delay)동안 실행한다.
▸ requestAnimationFrame(callback) : 지정한 함수(calback)을 호출해서 실행한다.
'FrontEnd > 쉽게 배우는 HTML5& CSS3 그리고 JavaScript' 카테고리의 다른 글
chaper7. 뭔가 만들어 보죠! (반응형 웹 사이트 만들기) (0) | 2024.09.02 |
---|---|
Chapter5.동작을 처리하는 자바스크립트와 제이쿼리 라이브러리 (0) | 2024.08.28 |
chapter4. 태그를 표현하는 CSS와 advanced CSS(css3) (0) | 2024.08.06 |
Chapter03 - 문서를 구조화하는 HTML (0) | 2024.08.05 |
Chapter01 - HTML5, CSS3, 자바스크립트의 개요 (0) | 2024.08.05 |