Notice
Recent Posts
Recent Comments
Link
Tags
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

JongDDA의 한걸음 한걸음씩

[JavaScript] 이벤트, 이벤트 객체 본문

개발/프론트엔드

[JavaScript] 이벤트, 이벤트 객체

종따 2021. 3. 26. 16:23
728x90

이벤트 : 브라우저에서 일어나는 모든 일!

=> 클릭, 더블클릭, 키보드 타이핑,드래그, 스크롤 등등...

 

이벤트 핸들러 : 이벤트가 발생했을 때 뭐할지 정해놓은 코드 묶음!

 

이벤트 등록 : 이벤트와 이벤트 핸들러를 연결하는 작업!

=> 예 - 클릭이벤트 발생했을 때, 클릭 이벤트 핸들러 호출해라!

 

이벤트 등록 방법

직접 요소 이벤트 등록 방식 :

HTML 태그에다가 속성으로 자바스크립트 동작을 추가하는 방식.

이 경우 속성값으로 실행될 자바스크립트코드가 추가되어야함

 

DOM을 이용한 이벤트 등록 방식 :

자바스크립트 선택자를 이용해서 핸들러를 추가하는 방식.

이 경우 속성값으로 실행될 호출할 함수를 추가해 주어야 한다.

 

이벤트 핸들러 내부에서 사용되는 this 키워드 :

이벤트가 발생한 객체를 this라고 한다!

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>자바스크립트</title>
    <style>
        .box{
            width: 200px; height: 200px;
            border: 1px solid black;
        }
        .center{width: 50%; margin: 0 auto;}
        img{ width: 100%}
    </style>

</head>
<body>
   
    <button class="button">PUSH</button>
    <div class="box"></div>
    <div class="box out"></div>
    <div style="height: 2000px;"></div> 
    <div class="fixed-button">고정된 버튼</div>

   <script src="01_script.js">
    </script>
</body>
</html>
var colors=["tomato","teal","brown","purple"]
var uniqColor ="black"
// document.getElementsByClassName("button")[0] // 클래스 이름을 가지고 요소를 가져와라 
// 클래스가 중복될 수 있다. 따라서 구분을 위해 배열의 특성을 가진다. 
var btn = document.querySelector(".button")

var handleClick = function(){ //this = btn
    var rn = Math.floor(Math.random()*4)
    var box = document.querySelector(".box")
    box.style.backgroundColor=colors[rn]
    
    console.log("클릭!")
}

function handleOver(){ //this = btn
    var box= document.querySelector(".box")
    box.style.backgroundColor=uniqColor
}
function handleOut(){ //this = btn
    var secondBox = document.querySelector(".out")
    var p = document.createElement("p")
    p.textContent = "마우스가 떠나갔다~!"
    secondBox.appendChild(p) // p태그를 secondBox에 추가
}

// 버튼 클릭 이벤트 발생시!
btn.onclick = handleClick  //this = btn
// 버튼에다가 마우스 얹었을시!
btn.onmouseover = handleOver  //this = btn

// 마우스 얺어져 있던거 떼었을 시!
btn.onmouseout = handleOut  //this = btn

// 브라우저에서 스크롤 이벤트 발생했을 때
window.onscroll = function(){ // this = window
    // pageYoffset: 위에서부터몇 픽셀 만큼 스크롤 내렸는지!
    console.log(this.pageYOffset) 

    // 만약에300px이상 내려다면, 고정버튼을 보여줘
    if(this.pageYOffset >=300){
        var fixedBox= document.querySelector(".fixed-button")
        fixedBox.style.display="block"
    }
    if(this.pageYOffset < 300){
        var fixedBox = document.querySelector(".fixed-button")
        fixedBox.style.display="none"
    }
}

 

 

 

객체 : 기능(함수)과 속성(값)을 가지고있는 데이터{}!

 

이벤트 객체 : 발생한 이벤트가 제공하는 기능과 속성을 가지고 있는 데이터!

 

이벤트 객체의 특징

- 사용자가 직접 정의하지 않는데, 필요한 값을 제공한다.

- 사용자가 직접 발생시키지 않는다.

- 이벤트가 발생했을 때, 이벤트 핸들러에 전달된다.

 

var button = document.querySelector(".button")

/*
아래 익명함수가 호출되는 순간에
발생한 이벤트에 대한 이벤트 객체가
함수에 전달된다. 따라서 이벤트 객체를
사용하고 싶다면, 이를 전달 받을 수 있어야 한다.
*/

button.onclick =function(evtObj){
    
    //evtObj 는 함수가 호출되었을 때 이벤트 객체 역할!
    //여기에는 해당 이벤트가 가진 속성과 기능이 들어있다.
     
    console.log(evtObj.layerX)
    console.log(evtObj.layerY)
} 

 

button을 누르면 버튼을 누른 위치(x,y좌표)를 표시해준다. (위 그림은 총 3번 위치를 다르게 하여 눌렀다.)

 

ex) 폼 처리하면서 이벤트객체 읽어보기

 

 

ex2) 이벤트 객체 활용해서 input에 작성중인 내용 실시간 확인하기

 

 

728x90
반응형
Comments