< Return to Video

RAF를 이용한 CSS 효과주기(비디오 버전)

  • 0:00 - 0:04
    다시 '오 노'
    카운트다운으로 돌아왔어요
  • 0:04 - 0:07
    만약 '오 노' 친구가
    점점 커지게 하려면요?
  • 0:07 - 0:10
    카운트다운이
    0에 가까워지면서요
  • 0:10 - 0:13
    마지막에 더 가까워지는
    것처럼 보이게요
  • 0:13 - 0:14
    이 효과를 주는
    첫번째 방법은
  • 0:14 - 0:19
    이 이미지의 CSS스타일을
    window.setInterval로 주는 거에요
  • 0:20 - 0:22
    첫번째로
    이미지를 찾아서
  • 0:22 - 0:25
    변수 형태로
    저장해둘게요
  • 0:25 - 0:32
    'var ohnoes =
    document.getElementById("ohnoes");'
  • 0:32 - 0:34
    그리고 시작스타일을
    지정할 거에요
  • 0:34 - 0:36
    같은 크기에서
    시작하게 말이죠
  • 0:36 - 0:39
    이렇게 하면 어느 정도부터
    커져야 하는지 알 수도 있어요
  • 0:39 - 0:44
    이제 makeItBigger함수를
    선언할거에요
  • 0:44 - 0:47
    그래서 매번
    커지게 만들거에요
  • 0:48 - 0:52
    이 함수에서는
    style.width를 바꿀거에요
  • 0:53 - 0:58
    이전 style.width를 가져와서
    1을 더해줄 거에요
  • 1:00 - 1:04
    마지막으로 이 함수를
    setInterval을 통해 호출할거에요
  • 1:04 - 1:08
    'window.setInterval(makeItBigger);'
  • 1:08 - 1:10
    얼마나 커지게
    할 것인지나
  • 1:10 - 1:12
    얼마나 자주 커지게
    할 것인지를 정할거에요
  • 1:12 - 1:14
    우리는 부드러운
    효과를 원하니까
  • 1:14 - 1:15
    그 말은 보통
  • 1:15 - 1:19
    초당 24프레임에서
    60프레임 정도를 말해요
  • 1:19 - 1:21
    저는 초당
    30프레임으로 할게요
  • 1:21 - 1:24

    30분의 1000이죠
  • 1:26 - 1:28
    그래요
    동작하지 않네요
  • 1:29 - 1:31
    이유를 알 것 같나요?
    약간 복잡해요
  • 1:31 - 1:34
    여기로 가서
    한번 생각해보죠
  • 1:34 - 1:40
    이 줄 다음에 오는
    ohnoes.style.width의 값은 뭐죠?
  • 1:41 - 1:46
    50픽셀이었으니
    51픽셀이라고 생각하지만
  • 1:46 - 1:50
    로그를 보고
    ohnoes.style.width의 값을 알아보죠
  • 1:50 - 1:52
    우리는 infoDiv에서
    이 값을 볼 거니까
  • 1:52 - 1:58
    '= ohnoes.style.width;'
    한번 봐요
  • 1:58 - 2:00
    50픽셀이네요
    좋아요
  • 2:00 - 2:05
    그럼 50픽셀에
    1을 더하려고 해요
  • 2:05 - 2:07
    50픽셀 더하기
    1은 뭐죠?
  • 2:07 - 2:10
    여러분은 51픽셀이라고
    하겠지만
  • 2:10 - 2:15
    자바스크립트는 '50px'를
    문자열로 인식해요
  • 2:16 - 2:20
    그러니까 '50px1'이
    되는거에요
  • 2:20 - 2:22
    아무 의미도
    없는 말이죠
  • 2:23 - 2:26
    그러니까 브라우저는
    우리의 시도를 무시하고 있을거에요
  • 2:26 - 2:29
    폭 값을 말도 안되는 값으로
    설정하려고 하니까요
  • 2:30 - 2:35
    우리는 단위가 달린 숫자를
    그냥 숫자로 변환하고
  • 2:35 - 2:40
    숫자에 1을 더해서
    그 뒤에 'px'를 붙여야해요
  • 2:41 - 2:45
    이걸 하려면 처음에
    parseFloat을 쓰면
  • 2:45 - 2:47
    숫자로
    바꿀 수 있어요
  • 2:47 - 2:50
    이걸 모두
    더한 후에
  • 2:50 - 2:53
    마지막에 'px'를
    붙여주면 돼요
  • 2:53 - 2:54
    와!
    동작하네요
  • 2:54 - 2:57
    얘가 점점
    커지고 있어요!
  • 2:57 - 2:59
    이제 여러분은
    약간 복잡한 부분을 배웠어요
  • 2:59 - 3:01
    CSS속성으로
    효과를 줄 때 말이죠
  • 3:01 - 3:03
    대부분 단위들이
    붙어있으니까
  • 3:03 - 3:05
    먼저 여러분은
    단위를 떼내고
  • 3:05 - 3:06
    어머나
    얘가 계속 커져요
  • 3:06 - 3:10
    다시 단위를
    붙여줘야해요
  • 3:11 - 3:14
    근데 얘가 점점
    무서워지려고 하네요
  • 3:14 - 3:18
    사실 더 무서운 것들이
    몇 가지 있어요
  • 3:18 - 3:21
    이 CSS에 효과를 줄 때
    setInterval을 사용하면 말이죠
  • 3:21 - 3:24
    첫번째로
    브라우저가 보장하지 않아요
  • 3:24 - 3:28
    이 속도를 정확히
    따라가는 걸 말이죠
  • 3:28 - 3:32
    사용자 움직임 같은
    다른 것들이 띄워진다면
  • 3:32 - 3:34
    문자를 친다거나 할때
  • 3:34 - 3:36
    그러면 여러분의 콜백 함수가
    늦게 불려져서
  • 3:36 - 3:39
    부드러운 효과를
    얻지 못할 수도 있어요
  • 3:39 - 3:41
    두번째로는 브라우저가
    함수를 계속 호출하게 되니까
  • 3:41 - 3:43
    만약 이 탭이
    가려져 있더라도 말이죠
  • 3:43 - 3:47
    컴퓨터의 작업 수행량을
    불필요하게 소비한다는거에요
  • 3:48 - 3:52
    그래서 최신 브라우저에는
    새로운 함수가 있어요
  • 3:52 - 3:55
    DOM 효과를 위해
    디자인 된 기능이죠
  • 3:55 - 3:59
    'window.requestAnimationFrame'
    이라고 불러요
  • 3:59 - 4:03
    이걸 사용하려면
    setInterval부분을 지우고
  • 4:03 - 4:08
    'requestAnimationFrame'을
    호출할 거에요
  • 4:08 - 4:12
    이 함수 안에서
    말이죠
  • 4:12 - 4:15
    그리고 참조를
    해줄 거에요
  • 4:15 - 4:19
    makeItBigger함수를
    호출하게 말이죠
  • 4:19 - 4:24
    그러면 페이지가 로드될 때
    makeItBigger함수를 호출하겠죠
  • 4:24 - 4:27
    'makeItBigger();'
  • 4:27 - 4:28

    좋아요
  • 4:28 - 4:31
    이번엔 정말 빠르게
    커지고 있네요
  • 4:31 - 4:34
    브라우저는 이제
    makeItBigger를 호출해요
  • 4:34 - 4:38
    그려지기 바로 직전에요
    초당 60프레임정도로요
  • 4:38 - 4:40
    저번에 설정했던 값의
    두 배 정도 되네요
  • 4:40 - 4:43
    그리고 매번 폭에 1픽셀을
    더하고 있으니까
  • 4:43 - 4:45
    계산 해보세요
    우리 수학 잘하잖아요
  • 4:45 - 4:48
    초당 60픽셀정도를
    더하고 있는 거에요
  • 4:48 - 4:51
    몇 초안에 얘가
    페이지보다 더 커질거에요
  • 4:51 - 4:53
    이제 사라졌네요
  • 4:53 - 4:56
    그럼 이 효과를
    어떻게 늦출 수 있을까요?
  • 4:56 - 4:58
    몇 가지 방법이 있지만
    제가 좋아하는 방법은
  • 4:58 - 5:01
    시간이 얼마나 지났는지
    기록하고 있다가
  • 5:01 - 5:05
    그걸 기준으로
    새로운 폭을 계산하는 거에요
  • 5:05 - 5:09
    밀리초 단위의 시작 시간을
    기록해두는 걸로 시작해요
  • 5:09 - 5:10
    함수가 불리기
    전에 말이죠
  • 5:10 - 5:13
    'var startTime'
  • 5:13 - 5:14
    다시 커지고 있어요
  • 5:14 - 5:17
    'new Date().getTime();'
  • 5:17 - 5:20
    그리고 makeItBigger안에
    현재 시간을 저장해요
  • 5:20 - 5:26
    'var currTime =
    new Date().getTime();'
  • 5:26 - 5:29
    계산을
    위해서는
  • 5:29 - 5:32
    초당 30픽셀만큼
    커지게 하고싶다고 해봐요
  • 5:32 - 5:34
    시작은
    50픽셀로 할게요
  • 5:34 - 5:37
    그럼 이제 여기서
    이걸 계산해요
  • 5:37 - 5:44
    newWidth은 50이니까
    시작하는 폭이요
  • 5:44 - 5:49
    현재 시간에서 시작 시간을
    뺀 값을 더해요
  • 5:49 - 5:50
    이건 밀리초 단위라서
  • 5:50 - 5:53
    천으로
    나눌 거에요
  • 5:53 - 5:57
    그리고 거기에
    30을 곱해서
  • 5:57 - 5:59
    왜냐하면 초당
    30픽셀씩 커지길 원하니까요
  • 5:59 - 6:02
    좋아요
    이게 newWidth네요
  • 6:02 - 6:09
    그리고 style.Width를
    newWidth로 해줘요
  • 6:12 - 6:14

    좋아요
  • 6:14 - 6:20
    초당 30픽셀로
    아주 부드럽게요
  • 6:20 - 6:28
    만약 느리거나 빠르게 하고싶다면
    이 값을 바꿔주면 돼요
  • 6:31 - 6:34
    얘가 너무 커졌을 때
    어떻게 멈추면 될까요?
  • 6:34 - 6:38
    이 부분을 그냥
    if문안에 넣어서
  • 6:38 - 6:45
    현재 폭이 특정 값보다
    작을 때만 수행되게요
  • 6:45 - 6:50
    예를 들어 300정도로
    한번 해볼게요
  • 6:54 - 6:58
    사실 currentWidth은 -
    아니 newWidth네요
  • 6:58 - 7:01
    좋아요
    300이 될 때까지 봐요
  • 7:04 - 7:05
    '오 노'
    파이팅!
  • 7:05 - 7:06
    할 수 있어!
  • 7:07 - 7:09

    아름다워요
  • 7:09 - 7:13
    requestAnimationFrame을
    사용하는 방법은
  • 7:13 - 7:17
    크롬이나 파이어폭스
    익스플로러 10이상을 쓰면 될 거에요
  • 7:18 - 7:21
    수많은 자바스크립트
    라이브러리나 도구가 있는데
  • 7:21 - 7:26
    requestAnimationFrame을
    지원할 때는 사용하고
  • 7:26 - 7:30
    예전 브라우저에서는
    setInterval로 바꿔서 사용하게 해줘요
  • 7:30 - 7:33
    이게 웹 개발에 대한
    중요한 점이에요
  • 7:33 - 7:35
    웹은 항상
    변하고 있고
  • 7:35 - 7:36
    브라우저는 계속
    새로운 기능을 추가하고
  • 7:36 - 7:40
    개발자들은 새 기능을 이용하는
    새로운 방법을 찾아내고 있으니
  • 7:40 - 7:44
    여러분은 계속해서
    새로운 것을 배우고
  • 7:44 - 7:46
    여러분이 하고 싶은 것에
    뭐가 최선인지 배워야 해요
Title:
RAF를 이용한 CSS 효과주기(비디오 버전)
Description:

RequestAnimationFrame을 이용한 CSS 효과 주기

more » « less
Video Language:
English, British
Duration:
07:48

Korean subtitles

Incomplete

Revisions