-
윈스턴 그림이 있는
페이지를 가져와봤어요
-
이제 슬슬 추워지고
윈스턴은 나이가 들어가니까
-
윈스턴은 수염이
있으면 좋겠대요
-
제가 수염을
그려줄 수도 있죠
-
하지만 이게
더 멋질 거에요
-
사용자가 원하는 대로 수염을
윈스턴에게 그려줄 수 있다면요
-
긴 수염과 까칠한 부분도
약간 있고 어떤 걸 원하든지요
-
그럼 이걸 어떻게 할 수 있을까요?
-
한 가지 방법은 이미지 위에서의
마우스 움직임(mouseMove) 이벤트를 넣는 거에요
-
사용자가 마우스를 얼굴 위로
움직이면 함수가 호출되게요
-
방금 배운 것으로
한번 해볼게요
-
첫 번째는
요소를 찾는거에요
-
이미지 말이죠
-
var face = document.getElementById()
-
id는 face라고 하죠
괜찮은 ID네요
-
두 번째는 콜백함수를
만드는 거에요
-
일단 적용되는 걸 봐야하니까
간단한 걸로 해볼게요
-
나중에 더 많은 걸
만들어 볼게요
-
좋아요
-
마지막 단계는
이걸 이것과 연결하는 거에요
-
마우스 이벤트가 발생했을 때
이 함수가 호출되어야 하니까요
-
face.addEventListener("mousemove",
라고 쓰고
-
함수 이름을 쓰세요
'onMouseMove'
-
이제 이걸 멈추고 얼굴 위로
마우스를 움직여봐요
-
문구가 보이세요?
-
이 효과가 적용되는 걸
여러분도 봤을 거에요
-
하지만 이게 우리가
원하는 효과는 아니에요
-
우린 문구를 쓰는게 아니라
그림을 그리고 싶어요
-
웹페이지에 어떻게
그림을 그릴 수 있을까요?
-
canvas 태그를 사용해서
픽셀을 그릴 수 있어요
-
여기 ProcessingJS에서
하는 것 처럼요
-
우리가 그리는 건 수염이지만
실제로는 수많은 검은 점일 거에요
-
그냥 각 점에
div를 생성해서
-
절대 위치로 div에게
위치를 줄 수 있죠
-
여기 수염 하나로
해볼게요
-
beard 클래스를 가진
div를 만들고
-
이 수염에게 CSS를 주고요
여기 넣을게요
-
이건 이렇게 고칠게요
-
이 수염의 배경색은
검정색이고 5x5 픽셀이에요
-
둥글게 만들려면
여기 2픽셀의 테두리를 줘요
-
그리고 절대 위치 값을 쓰고 있어요
-
지금은 div가 얼굴 밑에 있네요
-
얼굴 위로 올리려면
어떻게 해야할까요?
-
절대 위치를 사용한다는 것은
-
'top'과 'left' 속성을 사용해서
-
실제 위치를 표시해줘야해요
절대 위치니까요
-
여기 'top:80px'와
'left:15px'를 줄게요
-
좋아요
-
이제 HTML으로는 되니까
자바스크립트로 해볼게요
-
사용자가 마우스를 움직일 때마다
이 div가 생길 수 있게요
-
자바스크립트 콜백 함수로
돌아가 볼게요
-
첫 번째는 div를 만드는 거에요
-
document.createElement()
함수로 할 수 있어요
-
여긴 div가 되겠죠
-
두 번째로는 클래스를 추가해요
'beard.className = "beard";'
-
이제 div가 생겼는데 어딘가에 떠 있어요
-
마지막으로는 바디에 넣어주세요
-
이제 HTML에서 한 걸
자바스크립트로 해봤어요
-
HTML에서는 지울게요
-
이제 윈스턴을 클릭해 보세요
-
어떤 일이 일어나는지 보세요
-
수염이 생기는 거 봤어요?
-
이걸 여러번 하면요?
-
그러면 두 번째 클릭에서는
아무것도 안 되는게 보일 거에요
-
또는 아무것도
안 되는 것처럼 보이죠
-
왜냐하면 모든 div가
top과 left 값이 같아서
-
새 div가 예전 것 위에
겹쳐지고 있어요
-
우리는 div가 사용자의 마우스가
있는 곳에 생기길 원해요
-
마우스의 위치를
어떻게 알 수 있을까요?
-
브라우저는 많은 정보들을
기록하고 있어요
-
사용자 이벤트가 발생할 때마다
어디서 일어나는 지 같은 것들요
-
브라우저는 여러분들에게
매번 그 정보를 제공해요
-
이벤트 리스너 함수가
호출될 때마다 불러와요
-
그럼 어디서 어떻게 놀라운
정보를 얻을 수 있을까요?
-
힌트로 한 글자만 보여줄게요
-
이 e는 이벤트 정보 객체에요
-
브라우저는 이 객체를
첫 번째 인자로 전송해요
-
이벤트 리스너 콜백 함수가
호출되어질 때마다 말이죠
-
전에는 필요없었으니까
이 인자를 쓰지 않았어요
-
하지만 이제 사용할 거니까
객체에 이름을 줄거에요
-
이름은 함수에서 참조하기
쉽게 해줄거에요
-
자바스크립트에서는 함수에 여러 개의
인자를 줘도 호출할 수 있어요
-
함수가 그 인자를 사용하지 않고
참조하지 않아도 말이죠
-
이 정보는 항상 받고있었어요
우리가 몰랐을 뿐이죠
-
이제 이 e의 로그를 보기 위해
'console.log(e)'를 쓸게요
-
이제 잠깐 윈스턴을 클릭하고
콘솔을 관찰해보세요
-
이 이벤트 객체의
로그가 출력되는게 보일 거에요
-
그리고 이 객체의
속성을 볼 수 있어요
-
우리가 관심있는 속성은
두 개가 있어요
-
'clientX'와
'clientY'에요
-
이벤트의 x와 y 위치가 기록되는데
이걸 사용하게 될 거에요
-
수염의 위치를
지정하기 위해서요
-
수염의 top을 e.clientY로 하고
단위로는 px를 추가하세요
-
left는 e.clientX로 하고
단위로는 px를 추가하세요
-
이제 잠시 멈추고
마우스를 올려보세요
-
윈스턴에게 수염을 그려주세요
-
꽤 멋지죠?
-
여러분이 각종 색칠 프로그램을
상상할 수 있을거에요
-
clientX와 clientY를 이용해서요
-
콘솔에서 본 것 처럼
여러 속성들이 있어요
-
여러분이 이벤트 객체에서
사용할 수 있는 것들이요
-
제 생각에 가장 유용한 것은
키보드와 관련된 거에요
-
여러분은 사용자가 누르고
있던 키를 알 수 있어요
-
이벤트가 일어날 때 말이죠
-
이걸로 키보드를 사용하는 인터페이스나
아주 재밌는 게임을 만들 수 있어요
-
한 가지 더 있어요
-
이 인자를 e라고
부르지 않아도 돼요
-
일반적이지만 어떤 개발자들은
evt나 evert라고 불러요
-
뭐라고 부르든지 상관없어요
-
그게 브라우저가 여러분의 함수에
전달하는 첫번째 인자라면요
-
그리고 그 객체를 이런 방식으로
참조할 것이라면요
-
만약 문제가 생긴다면
console.log를 사용하도록 해요
-
어떤 일이 일어나는지
디버깅을 도와줄거에요
-
여러분이 웹 개발자가 되면
-
콘솔은 아마 여러분의
가장 친한 친구가 될거에요
-
쓰세요!