카테고리 없음

내일배움캠프 React트랙 6일차 회고 (2022.11.07)

ecoEarth 2022. 11. 7. 21:27

오늘은 이런 것을 공부했다.

요약하자면 셀렉터, 이벤트 리스너, 콜백함수

 

동적 UI 만드는 스텝 (Alert 박스 만들기)

   <script>
        function show() {
            document.getElementById('alertbox').style.display = "block"; 
        }

        function hide() {
            document.getElementById('alertbox').style.display = "none"; 
        }
    </script>
</head>
<body>
    <div id="alertbox">알림창임<button onclick='hide()'>닫기</button></div>
    <button onclick='show()'>띄우기</button>
</body>

1. 부트스트랩을 이용할 때 요소들을 합성하는 방법이 궁금했는데 답은 html에 있었다. html 엘리먼트내에 html을 추가할 수 있다.

ex)위의 코드에서 alertnox내에 닫기버튼을 추가시킨것처럼...

2. UI를 평소에 숨기고 싶으면 display : none 주면 된다.

다시 보여주고 싶으면 display : block 넣으면 보인다.

싫으면 visibility : hidden  이것도 있다.


function에 사용가능한 파라미터 문법 

    <script>
        function show_hide(x) {
            document.getElementById('alertbox').style.display = x; 
        }
    </script>
</head>
<body>
    <div id="alertbox">알림창임<button onclick="show_hide('none')">닫기</button></div>
    <button onclick="show_hide('block')">띄우기</button>
</body>

⚠️caution!!

1. 파라미터 인자에는 따옴표나 큰따옴표 붙이지 않기 -> 'x'(x) x(o)

2. html문서내에서 함수와 파라미터를 동시에 선언할때는 따옴표안에 따옴표를 집어넣거나 큰따옴표안에 큰따옴표를 집어넣으면 오류가 생기므로, "show_hide('none')"와 같이 큰따옴표안에 따옴표를 집어넣는식으로 코드를 작성하자.

function get_arguments(arg1, arg2){
    return arg1 + arg2
}
 
alert(get_arguments(10, 20));
alert(get_arguments(20, 30));

와 같이 여러개의 인자를 포함시키는 함수도 작성가능하다.

 

숙제

버튼1 누르면 '아이디입력하세요' 라는 alert 박스가 떠야함

버튼2 누르면 '비번입력하세요' 라는 alert 박스가 떠야함 

 

숙제 답안코드 

    <script>
        function show_hide(x) {
            document.getElementById('alertbox').style.display = x; 
            document.getElementById('alertbox').innerHTML = x; 
        }

        function pop(y) {
            document.getElementById('alertbox').style.display = 'block'; 
            document.getElementById('title').innerHTML = y; 
        }
    </script>
</head>
<body>
    <div id="alertbox"><p id="title">알림창임</p><button onclick="show_hide('none')">닫기</button></div>
    <button onclick="pop('아이디 입력하셈')">버튼1</button>
    <button onclick="pop('비밀번호를 입력하세요')">버튼2</button>
</body>

⚠️caution!!

1. innerHTML메소드는 id내에 모든 값을 변경시키므로 적용시킬 범위를 잘 조정해줘야한다. 만약 위의 코드에서 <p>엘리먼트를 따로 두지않는다면 '닫기'버튼이 사라지게 된다.


자바스크립트 이벤트리스너

getElementsByClassName 셀렉터

<p class="title1"> 테스트1 </p>
<p class="title1"> 테스트2 </p>
<script>
  document.getElementsByClassName('title1')[0].innerHTML = '안녕';
</script>

이러면 첫 <p> 태그 내용이 안녕으로 바뀐다.

getElementsByClassName('클래스명')[순서] 이렇게 쓰면 됩니다. getElementsByClassName('클래스명')만 입력하면,

클래스로 지정된 모든 엘리먼트가 선택된다.

 

getElementsByClassName 셀렉터 뒤에 위치하는 [0] 과 같은 숫자는, class로 지정된 모든 html 요소들중 

맨위를 첫번째 순서로 시작해서 지정해주면 된다.  

 

addEventListener() 함수

이벤트 리스너 사용구조

document.getElementById('어쩌구').addEventListener('click', function(){
    //실행할 코드 
});

이렇게 작성하면 'id가 어쩌구인 요소를 -> 클릭하면 -> 안의 코드를 실행해주세요~' 라는 뜻이다.

이 이벤트리스너를 쓰면 버튼 같은 곳에 onclick 넣을 필요가 없는 것이다.

 

document.getElementById('close').addEventListener('click', function(){
    document.getElementById('alert').style.display = 'none'
});

이렇게 작t성하면 버튼내의 엘리먼트인 onclick을 빼도 된다.

 

event란?

유저가 웹페이지 접속해서 클릭, 스크롤, 키보드입력, 드래그 등을 할 수 있는데 이와 같이 유저가 브라우저와 상호작용하는 행위를 전문용어로 이벤트라고 정의한다.

어떤 요소 클릭시엔 click 이벤트, 마우스갖다대면 mouseover 이벤트, 스크롤하면 scroll 이벤트, 키입력하면 keydown 이벤트

... etc 몇십가지가 있다.

셀렉터로찾은요소.addEventListener('mouseover', function(){ 
  실행할코드
});

▲ 셀렉터로 찾은 요소에 마우스를 스윽 갖다대면, 특정 코드를 실행해준다.

 

셀렉터로찾은요소.addEventListener('scroll', function(){ 
  실행할코드
});

▲ 셀렉터로 찾은 요소가 스크롤되면 특정 코드를 실행해준다. (당연히 그 요소에 스크롤바가 있어야됨)

 

셀렉터로찾은요소.addEventListener('keydown', function(){ 
  실행할코드
});

▲ 셀렉터로 찾은 요소에 키보드로 글자를 입력하면 특정 코드를 실행해준다. (그 요소가 글자를 입력할 수 있는 input 이런거여야 함)

 

 

이벤트 종류는 수십가지가 있다. 

https://developer.mozilla.org/en-US/docs/Web/Events

(이벤트 목록이다. 필요할 때 찾아쓰면 된다.)

 

콜백함수

셀렉터로찾은요소.addEventListener('scroll', function(){} );

이벤트 리스너 생김새를 잘 보면 함수같이 생겼다. (실제로 뒤에 소괄호 붙으면 다 함수입니다.)

 

근데 addEventListener() 함수에는 파라미터 자리에 2개의 자료를 집어넣는데,

저렇게 함수 파라미터자리에 들어가는 함수를 전문용어로 '콜백함수'라고 한다.

콜백함수는 그냥 뭔가 순차적으로 실행하고 싶을 때 많이 보이는 함수형태인데, 

그냥 함수안에 함수 넣으라고 하면 "아 저건 콜백함수구나~" 라는 반응만 보이면 된다.