-> 새로운 방법 !
이벤트 함수를 이용하기
addEventListener ( “xxx”, function( ){ } )
-> 함수를 호출하면서 함수를 전달(동작을 전달)하는 구조
"xxx": 이벤트명 , click, mousedown, mousemove, mouseover, focus, submit, blur, ...
function( ){ } : 그 이벤트가 일어났을 때 실행할 함수
기존 global변수(함수)를 이용할 때
let clicked=function(){
alert("버튼을 눌렀네요 ?");
};
global변수 x, id가 myBtn인 요소에 "click"이라는 이벤트가 일어났을 때 호출될 예정인 함수 등록하기
document.querySelector("#myBtn").addEventListener("click", function(){
alert("버튼을 눌렀네요 ?");
});
*** 작동과정이 어려움, 잘 이해하기 !
*** 헷갈리기 시작
function useFunc을 실행하면
그 자리에 다시 b(); , 즉 useFunc의 함수가 실행된 값이 들어간다
이렇게 함수는 함수를 호출할 뿐 아니라 다시 함수를 불러올수도 있다
함수를 전달 -> 함수의 참조값을 전달
Step02_event2 - 너무너무 어려움
위의 div에 "mousedown" 이벤트가 일어나면 div의 배경색을 노란색으로 바꿔 보세요.
hint : .style.backgroundColor="색상";
위의 div에 "mouseup" 이벤트가 일어나면 div의 배경색을 흰색으로 바꿔 보세요.
document.querySelector("#myDiv").addEventListener("mousedown", function(){
document.querySelector("#myDiv").style.backgroundColor="yellow";
});
document.querySelector("#myDiv").addEventListener("mouseup", function(){
document.querySelector("#myDiv").style.backgroundColor="white";
});
이까진 쉬움
function(e) : 이벤트함수의 매개변수
document.querySelector("#myDiv").addEventListener("mousemove", function(e){
console.log(e);
let info="x좌표: "+e.offsetX+", y좌표: "+e.offsetY
document.querySelector("#myDiv").innerText=info;
})
콘솔창 object 내에 보면
screenX, screenY : 모니터 내에서의 좌표
pageX, pageY : 웹브라우저 내에서의 좌표
offsetX, offsetY : div 내에서의 좌표 (가장 작은 값)
매개변수 e로 두고 console.log(e)찍으면 콘솔창에 e가 받은 object 값을 다 보여주고 있음
// 이 함수는 함수를 인자로 전달받는 함수다
function useFunc(f){
let obj={name:"김구라", x:100, y:200};
// 함수 안에서는 1)인자로 전달받은 함수를 호출하면서 2)object를 하나 전달한다.
f(obj);
}
-> 매개변수가 있는 함수는 함수를 인자로 전달받는 함수 !! 그 매개변수를 호출하면서 함수 안의 object를 전달하기로 약속
그 오브젝트를 받아야할 준비를 해야함 -> 새로운 매개변수 e
매개변수의 이름은 마음대로 지을 수 있다, just object가 전달되는 역할
// 2. 위의 함수를 사용하는 사용자 입장에서 생각해 보자
useFunc(function(e){ // e : 함수 호출하면서 전달한 값 f(obj);을 전달받을 매개변수 (새롭게 지정)
console.log("내가 전달한 함수가 사용되네?")
console.log(e);
console.log(e.name);
})
재정리
-> 맞는지 모르겠지만 일단 정리 ,, 나중에 다시 고쳐야징
(참고한것)
매개변수
함수를 호출할때 어떠한 데이터를 함수로 전달해줄수있다
function printFruit(name){ 2. 임의의 변수명 지어주면 이 변수의 이름으로 함수를 호출할 때(name) 전달받은 데이터(banana)를 사용하겠다
따라서 printFruit 내에 name이라는 변수명은 함수를 호출할때 전달받은 값이 들어가게 되므로
console.log(name); 3. <- 이 코드에서는 'banana'가 출력되게 된다
}
printFruit("banana"); -> 1. 함수를 호출할때 문자열 "banana"를 함수로 전달
쌤의 예시
동생은 이 함수 ! 형이 프로그래밍 해놓은 것
function useFunc 이 은행
지점장이 너를 찾을거야 : f(obj);
계약서 : {name:"김구라", x:100, y:200}
그 계약서는 동생에게 감 ( e: 동생의 왼손 혹은 오른손 – 어떻게 받든 동생마음 : 매개변수 이름은 내마음 ) ,
형이 시키는대로 함(e.name)
div가 여러개니까 반복문 필요(각각 다 이벤트가 걸려야 함),
반복문은 배열에서 쓰는 거니까 배열인 querySelesctorAll !!!
첫번째 방법
for (let i=0; i<10; i++){
document.querySelectorAll(".box")[i].addEventListener("click", function(){
document.querySelectorAll(".box")[i].innerText="clicked!"
});
}
반복문이 제일 먼저 !
i를 먼저 지정해 줘야 뒤에 i들을 갖다 쓸 수 있으니까
두번째 방법 - 이벤트를 걸어줄 div의 참조값을 배열에 담아오기
let divs=document.querySelectorAll(".box");
for (let i=0; i<divs.length; i++){
divs[i].addEventListener("click", function(){
this.innerText="clicked!"
});
}
this라는 예약어는 이벤트가 일어난 바로 그 요소의 참조값을 가리킨다 !
여기서는 divs[i]를 가리킴 (divs의 i번째 참조값)
+) css요소
.box:hover
-클래스명이 box이면서 마우스가 올려져(hover) 있는 요소에 적용할 css
+)
순서대로 같은거 여러개 만들기
div.box{div$}*10 해서 탭 !