[JS, HTML, CSS] 이벤트

2022. 6. 17. 15:32·개발/html, css, js
728x90
반응형
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<style>
    ._target{
        width: 200px;
        height: 200px;
        background-color: beige;
    }
</style>
<body>
    <div class="_target"></div>
    <input id="_input" type="text">
    <form action="">
        <button id="_btn">시작</button>
    </form>
</body>
<script src="01.js"></script>
</html>

 

// 이벤트 함수의 타겟


// 클릭이벤트
window.onclick = function(event){
    //event.target은 이벤트가 발생한 요소
    //event 태그의 이벤트가 담겨있다.
    console.log(event.target);
    event.target;
    //클래스가 무엇인지로 판단을 해서 이벤트를 적용시킬수도 있다.
    if(event.target.classList.contains("_target")){
        console.log("있어")
    }

    //클래스가 무엇인지 가져와서 조건문으로 이벤트를 설정해 줄수 있다.
    let _class = event.target.className;
    switch(_class){
        case "_target":
        break;
        case :
        break;
        default:
        break;
    }
}



// //마우스의 현재 페이지에서의 위치
window.onmousemove = function(e){
    //e.type 해당 이벤트의 타입이 무엇인지
    //e.pageX 문서 페이지의 상에서 마우스의 X좌표
    //e.pageY 문서 페이지의 상에서 마우스의 Y좌표
    console.log(e.pageX,e.pageY,e.type)
}




// 키보드 입력 이벤트
_input.onkeydown = function(e){
    //_input 여기에 이벤트는 kyboardEvent
    //e.keyCode ascii코드 숫자로 보이고 영문키 엔터 컨트롤 알트 숫자 입력시 표기
    console.log(e.keyCode);
}



//기본 동작을 취소하는 방법
_btn.onclick = function(e){
    //기본 동작을 취소하는 preventDefault()
    e.preventDefault();
    //버블링 현상을 막는 방법(이벤트 전파)
    //stapPropagetion() 이벤트 전파를 막는 함수
    e.stopPropagetion();
};

 

2. 실습

<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<style>
    .container{
        width: 800px;
        height: 800px;
        display: flex;
        flex-wrap: wrap;
    }
    .box{
        width: 400px;
        height: 400px;
        border: 1px solid;
        box-sizing: border-box;
    }
    .item{
        width: 100%;
        height: 100%;
        background-color: aqua;
    }
</style>
<body>
    <div class="container">
        <div class="box">
            <!-- draggable 드래그를 혀용 하는지 어트리뷰트-->
            <div class="item" draggable="true"></div>
        </div>
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>
<script>
    //드래그할 target을 넣을 변수 초기에 null
    let _target = null;

    //ondragstart 드래그가 시작될때
    document.ondragstart = function(e){
        //item 클래스가 있으면 t
        if(e.target.classList.contains("item")){
            // _target 드래그가 시작될때 이벤트의 타겟을 넣어준다.
            _target = e.target;
            // 타겟이 잘 잡혔는지 확인하려고 스타일 입힘
            //일반 css에서 쓰는 하이픈(-)이 포함된 이름은 하이픈지우고 뒤글자를 대문자로
            e.target.style.backgroundColor = "red";
        }
    }
    
    //ondragend 드래그가 끝났을때
    document.ondragend = function(e){
        //e.target에 item 클래스가 있으면
        // 드래그가 끝나서 _target을 비워줌
        _target = null;
        if(e.target.classList.contains("item")){
            //처음 설정했던 컬러로 backgroundColor 변경
            e.target.style.backgroundColor = "aqua";

        }
    }

    //dragenter 드래그를 해서 다른 요소 위세 마우스가 올려졌을때
    document.ondragenter = function(e){
        //타겟이 box클래스를 가지고 있으면
        if (e.target.classList.contains("box")&& _target !== null){
            e.target.style.backgroundColor = "green"
        }
    }

    //ondragleave 드래그해서 요소안에 있다가 마우스가 요소 밖으로 나갔을때
    document.ondragleave = function(e){
        if(e.target.classList.contains("box")){
            e.target.style.backgroundColor = "transparent";
        }
    }

    //ondargover 드롭 대상에서 이벤트를 발생할수 있게
    document.ondragover = function(e){
        if(e.target.classList.contains("box") && _target !== null){
            //드롭을 허용하도록 preventDefault() 호출
            e.preventDefault();
        }
    }

    //ondrop 드래그를 하다가 마우스 버튼을 땠을때
    document.ondrop = function(e){
        //타겟이 box 클래스를 가지고 있으면
        if(e.target.classList.contains("box")){
            //타겟의 backgroundColor를 다시 투명하게
            e.target.style.backgroundColor = "transparent";
            //타겟에 처음 드래그 시작해서 변수에 전달한 item용
            //드래그하다가 놓은 타겟이 box면 타겟에 자식요소로 item 담긴 변수를 넣는다.
            e.target.appendChild(_target);
        }
    }
</script>
</html>

 

 

728x90
반응형

'개발 > html, css, js' 카테고리의 다른 글

[JavaScript] 농구게임 만들기  (0) 2022.06.21
[HTML, JavaScript] 정규표현식  (0) 2022.06.21
[HTML, CSS] 이벤트리스너  (0) 2022.06.09
[HTML, JavaScript] 가위바위보, 일정 캘린더 만들기  (0) 2022.06.07
[JavaScript] 각종 이벤트  (0) 2022.06.07
'개발/html, css, js' 카테고리의 다른 글
  • [JavaScript] 농구게임 만들기
  • [HTML, JavaScript] 정규표현식
  • [HTML, CSS] 이벤트리스너
  • [HTML, JavaScript] 가위바위보, 일정 캘린더 만들기
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컨테이너
    ERC721
    nodejs
    명령어
    React
    node
    프로그래머스
    30일 챌린지
    go언어
    블록체인
    node.js
    go
    html
    30일챌린지
    하이퍼레저
    도커
    js
    mysql
    CSS
    erc20
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[JS, HTML, CSS] 이벤트
상단으로

티스토리툴바