티스토리 뷰

CSS 애니메이션

@keyframes 키워드를 사용하여 시간 순서대로 정밀하게 짜여진 애니메이션을 만들 수 있음

 

① @keyframes 블록 만들기

@keyframes 애니메이션-이름 {
  0% { /* 또는 from */
    속성: 속성값
  }
  50% { /* 1~99% +소수점 사용 // 중간값 */
    속성: 속성값
  }
  100% { /* 또는 to */
    속성: 속성값
  }
}

중간값: 애니메이션 재생 시간 기준

 

② 셀렉터에 animation 속성 주기

animation 속성에 띄어쓰기로 여러 속성을 설정할 수 있음

 

필수

animation-name

: 애니메이션 이름. 보통 중간 상태를 알 수 있는 이름으로 지정

anmation-duration

: 한 싸이클의 애니메이션이 재생될 시간 지정

 

animation-delay

: 반복 시 애니메이션 시작을 지연시킬 시간 지정

animation-direction

: 애니메이션 재생 방향 지정

(normal: 기본값. 순방향, reverse: 역방향, alternate: 순방향-역방향 반복, alternate-reverse: 역방향-순방향 반복)

animation-iteration-count

: 애니메이션 반복 횟수 지정

animation-play-state

: 애니메이션 재생 상태

(running: 기본값, pause: 정지. 보통 이벤트로 재생 상태를 변경시킬 때 사용)

animation-timing-function

: 중간 상태들의 전환을 어떤 시간 간격으로 진행할 지 지정

(ease: 기본값, liner: 끊김 없이, ease-in, ease-out, ease-in-out)

anmation-fill-mode

: 애니메이션 재생 전후 상태 지정(재생 중이 아닌 경우)

(none: 기본값. 요소의 스타일 유지, forwards: 마지막 키프레임-100%, to- 스타일 유지, backwards: 첫 번째 키프레임-0%, from- 스타일 유지, both: 재생 전 첫 번째 키프레임, 재생 후 마지막 키프레임 스타일)

@keyframes lotate {
  0% {
    transform : rotate(0deg)
  }

  50% {
    transform : rotate(180deg)
  }

  100% {
    transform : rotate(360deg)
  }
}

/* 시작 시점에선 0도, 50% 시점에선 180도, 완료 시점에선 360도 회전시키는 애니메이션
#logo {
  animation : lotate 3s infinite ;
/* 애니메이션 무한 반복 */
}

#logo {
  animation-name : lotate;
  animation-duration : 3s;
  animation-iteration-count : 3 ;
/* 애니메이션 3번 반복 */
}

Canvas

html <canvas>와 자바스크립트를 이용하여 다양한 그래픽 요소를 만들 수 있음

- 도형 그리기

- 데이터 시각화

- 애니메이션

- 웹 게임 등

 

① html 파일에 canvas 태그 생성

- DOM으로 조작해야하기 때문에 html에 canvas 생성 시 id를 지정해줄 것

- 캔버스를 지원하지 않는 브라우저에서는 태그 사이 내용이 표시 됨

<canvas id="canvas">
  캔버스를 지원하지 않는 브라우저에서 표시될 내용
</canvas>

 

② 자바스크립트에서 캔버스 선택

const canvas = document.querySelector("#canvas")

 

③ 너비 설정하기

- 설정하지 않는다면 기본값 300px * 150px

- html에서 지정하면 px값으로만 지정할 수 있음

<canvas id="canvas" width="50" height="500"> </canvas>

 

- DOM으로 설정. 상대단위를 사용할 수 있기 때문에 캔버스의 크기가 고정되어 있지 않은 경우 사용

canvas.style.width = '50vw';
canvas.style.height = '50vh';

canvas.width = window.innerWidth * 0.5; //50vw 와 같음
canvas.height = window.innerHeight * 0.4; //40vw 와 같음

 

④ 돔 조작

캔버스의 드로잉 컨텍스트를 반환

const ctx = canvas.getContext("2d");

ctx.fillStyle 내부 색상 설정

ctx.fillRect=(시작x, 시작y, 가로길이, 세로길이) 좌표만큼 색 채우기

ctx.linerWidth: 선 굵기

ctx.strokeStyle: 선 색상

ctx.strokeRect=(시작x, 시작y, 가로길이, 세로길이) 좌표의 테두리 그리기 

ctx.clearRect=(시작x, 시작y, 가로길이, 세로길이) 크기만큼 지우기

 

⑤ 컨버스 위의 마우스 위치 구하기

1. 화면 위 마우스 위치에서 화면 위 캔버스 위치 빼주기

화면 위 마우스 위치

x좌표: event.clientX

y좌표: event.clientY

 

화면 위 캔버스 위치

ctx.canvas.offsetLeft

ctx.canvas.offsetTop

 

2. event.offsetX, event.offsetY로 위치 바로 구하기

 

 

chart.js 라이브러리 사용하기

1. 설치

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js" ></script>
</head>

 

2. canvas 태그 생성

<canvas id="myChart" width="600" height="400"></canvas>

 

3. 인스턴스화 시키기

let myCanvas = document.getElementById("myChart").getContext("2d");

 

4. Chart에 데이터 전달하기

const labels = [
        'January',
        'February',
        'March',
        'April',
        'May',
        'June',
    ];

    const data = {
        labels: labels,
        datasets: [{
        label: 'My First dataset',
        backgroundColor: 'rgb(255, 99, 132)',
        borderColor: 'rgb(255, 99, 132)',
        data: [0, 10, 5, 2, 20, 30, 45],
        }]
    };

    const config = {
        type: 'line',
        data: data
    };

    //이 부분이 chart constructor 입니다.
    const myChart = new Chart(
        myCanvas,
        config
    );

Chart의 두 번째 인자 config의 type으로 차트의 타입을 설정해 줄 수 있음

- line

- bar

- radar

- polarArea

- pie

- doughnut

- bubble

 

data 키로 실제 데이터 담기

 

backgroundColor 키로 막대들의 색상을 다르게 지정해 줄 수 있음(기본값 rgba(0,0,0,0.1))

예시

 

 

 

 

 

2023.01.17

코스 S4U2 애니메이션, 캔버스

'코드스테이츠(SEB_FE_42)' 카테고리의 다른 글

[React] Webpack  (0) 2023.01.19
[React] 번들링, 웹팩  (0) 2023.01.18
[HTML] 브라우저 렌더링  (0) 2023.01.14
[HTML/CSS] 브라우저, 반응형 웹  (0) 2023.01.14
[자료구조/알고리즘] Tree, Graph  (0) 2023.01.13
댓글
공지사항