-
다시 '오 노'
카운트다운으로 돌아왔어요
-
만약 '오 노' 친구가
점점 커지게 하려면요?
-
카운트다운이
0에 가까워지면서요
-
마지막에 더 가까워지는
것처럼 보이게요
-
이 효과를 주는
첫번째 방법은
-
이 이미지의 CSS스타일을
window.setInterval로 주는 거에요
-
첫번째로
이미지를 찾아서
-
변수 형태로
저장해둘게요
-
'var ohnoes =
document.getElementById("ohnoes");'
-
그리고 시작스타일을
지정할 거에요
-
같은 크기에서
시작하게 말이죠
-
이렇게 하면 어느 정도부터
커져야 하는지 알 수도 있어요
-
이제 makeItBigger함수를
선언할거에요
-
그래서 매번
커지게 만들거에요
-
이 함수에서는
style.width를 바꿀거에요
-
이전 style.width를 가져와서
1을 더해줄 거에요
-
마지막으로 이 함수를
setInterval을 통해 호출할거에요
-
'window.setInterval(makeItBigger);'
-
얼마나 커지게
할 것인지나
-
얼마나 자주 커지게
할 것인지를 정할거에요
-
우리는 부드러운
효과를 원하니까
-
그 말은 보통
-
초당 24프레임에서
60프레임 정도를 말해요
-
저는 초당
30프레임으로 할게요
-
즉
30분의 1000이죠
-
그래요
동작하지 않네요
-
이유를 알 것 같나요?
약간 복잡해요
-
여기로 가서
한번 생각해보죠
-
이 줄 다음에 오는
ohnoes.style.width의 값은 뭐죠?
-
50픽셀이었으니
51픽셀이라고 생각하지만
-
로그를 보고
ohnoes.style.width의 값을 알아보죠
-
우리는 infoDiv에서
이 값을 볼 거니까
-
'= ohnoes.style.width;'
한번 봐요
-
50픽셀이네요
좋아요
-
그럼 50픽셀에
1을 더하려고 해요
-
50픽셀 더하기
1은 뭐죠?
-
여러분은 51픽셀이라고
하겠지만
-
자바스크립트는 '50px'를
문자열로 인식해요
-
그러니까 '50px1'이
되는거에요
-
아무 의미도
없는 말이죠
-
그러니까 브라우저는
우리의 시도를 무시하고 있을거에요
-
폭 값을 말도 안되는 값으로
설정하려고 하니까요
-
우리는 단위가 달린 숫자를
그냥 숫자로 변환하고
-
숫자에 1을 더해서
그 뒤에 'px'를 붙여야해요
-
이걸 하려면 처음에
parseFloat을 쓰면
-
숫자로
바꿀 수 있어요
-
이걸 모두
더한 후에
-
마지막에 'px'를
붙여주면 돼요
-
와!
동작하네요
-
얘가 점점
커지고 있어요!
-
이제 여러분은
약간 복잡한 부분을 배웠어요
-
CSS속성으로
효과를 줄 때 말이죠
-
대부분 단위들이
붙어있으니까
-
먼저 여러분은
단위를 떼내고
-
어머나
얘가 계속 커져요
-
다시 단위를
붙여줘야해요
-
근데 얘가 점점
무서워지려고 하네요
-
사실 더 무서운 것들이
몇 가지 있어요
-
이 CSS에 효과를 줄 때
setInterval을 사용하면 말이죠
-
첫번째로
브라우저가 보장하지 않아요
-
이 속도를 정확히
따라가는 걸 말이죠
-
사용자 움직임 같은
다른 것들이 띄워진다면
-
문자를 친다거나 할때
-
그러면 여러분의 콜백 함수가
늦게 불려져서
-
부드러운 효과를
얻지 못할 수도 있어요
-
두번째로는 브라우저가
함수를 계속 호출하게 되니까
-
만약 이 탭이
가려져 있더라도 말이죠
-
컴퓨터의 작업 수행량을
불필요하게 소비한다는거에요
-
그래서 최신 브라우저에는
새로운 함수가 있어요
-
DOM 효과를 위해
디자인 된 기능이죠
-
'window.requestAnimationFrame'
이라고 불러요
-
이걸 사용하려면
setInterval부분을 지우고
-
'requestAnimationFrame'을
호출할 거에요
-
이 함수 안에서
말이죠
-
그리고 참조를
해줄 거에요
-
makeItBigger함수를
호출하게 말이죠
-
그러면 페이지가 로드될 때
makeItBigger함수를 호출하겠죠
-
'makeItBigger();'
-
오
좋아요
-
이번엔 정말 빠르게
커지고 있네요
-
브라우저는 이제
makeItBigger를 호출해요
-
그려지기 바로 직전에요
초당 60프레임정도로요
-
저번에 설정했던 값의
두 배 정도 되네요
-
그리고 매번 폭에 1픽셀을
더하고 있으니까
-
계산 해보세요
우리 수학 잘하잖아요
-
초당 60픽셀정도를
더하고 있는 거에요
-
몇 초안에 얘가
페이지보다 더 커질거에요
-
이제 사라졌네요
-
그럼 이 효과를
어떻게 늦출 수 있을까요?
-
몇 가지 방법이 있지만
제가 좋아하는 방법은
-
시간이 얼마나 지났는지
기록하고 있다가
-
그걸 기준으로
새로운 폭을 계산하는 거에요
-
밀리초 단위의 시작 시간을
기록해두는 걸로 시작해요
-
함수가 불리기
전에 말이죠
-
'var startTime'
-
다시 커지고 있어요
-
'new Date().getTime();'
-
그리고 makeItBigger안에
현재 시간을 저장해요
-
'var currTime =
new Date().getTime();'
-
계산을
위해서는
-
초당 30픽셀만큼
커지게 하고싶다고 해봐요
-
시작은
50픽셀로 할게요
-
그럼 이제 여기서
이걸 계산해요
-
newWidth은 50이니까
시작하는 폭이요
-
현재 시간에서 시작 시간을
뺀 값을 더해요
-
이건 밀리초 단위라서
-
천으로
나눌 거에요
-
그리고 거기에
30을 곱해서
-
왜냐하면 초당
30픽셀씩 커지길 원하니까요
-
좋아요
이게 newWidth네요
-
그리고 style.Width를
newWidth로 해줘요
-
오
좋아요
-
초당 30픽셀로
아주 부드럽게요
-
만약 느리거나 빠르게 하고싶다면
이 값을 바꿔주면 돼요
-
얘가 너무 커졌을 때
어떻게 멈추면 될까요?
-
이 부분을 그냥
if문안에 넣어서
-
현재 폭이 특정 값보다
작을 때만 수행되게요
-
예를 들어 300정도로
한번 해볼게요
-
사실 currentWidth은 -
아니 newWidth네요
-
좋아요
300이 될 때까지 봐요
-
'오 노'
파이팅!
-
할 수 있어!
-
와
아름다워요
-
requestAnimationFrame을
사용하는 방법은
-
크롬이나 파이어폭스
익스플로러 10이상을 쓰면 될 거에요
-
수많은 자바스크립트
라이브러리나 도구가 있는데
-
requestAnimationFrame을
지원할 때는 사용하고
-
예전 브라우저에서는
setInterval로 바꿔서 사용하게 해줘요
-
이게 웹 개발에 대한
중요한 점이에요
-
웹은 항상
변하고 있고
-
브라우저는 계속
새로운 기능을 추가하고
-
개발자들은 새 기능을 이용하는
새로운 방법을 찾아내고 있으니
-
여러분은 계속해서
새로운 것을 배우고
-
여러분이 하고 싶은 것에
뭐가 최선인지 배워야 해요