본문 바로가기
Language/JavaScript

[JavaScript] classList

by 며루치꽃 2020. 9. 4.

코딩을 할 때 효과적인 방식은 html은 html파일에만 쓰고 css로 처리할 수 있는 것은 css로 처리하고 JavaScript는 최소한의 로직만 처리하게끔 분리하는것이다.

 

 

 

반응속도.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>반응속도</title>
    <style>
        #screen{
            width: 300px;
            height: 200px;
            text-align: center;
        }
        #screen.waiting{
            background-color: aqua;
        }
        #screen.ready{
            background-color: red;
            color: white;
        }
        #screen.now{
            background-color: red;
        }
    </style>
</head>
<body>
    <script src="반응속도.js">
        
    </script>
</body>
</html>

html에 이렇게 style을 여러개의 class형태로 여러 속성을 적용을 해놓았다. 

 

반응속도.js

var 스크린 = document.querySelector('#screen');

var 상태 = {

};

스크린.addEventListener('click', function(){
    if(스크린.classList.contains('waiting')){ // classList.contains: 현재클래스를 파악가능하다 
        스크린.classList.remove('waiting'); // class는 여러 스타일을 한번에 적용할 수 있어서 좋다. 클래스가 여러개 일때 한번에 적용하기 쉽다
        스크린.classList.add('ready'); 
        스크린.textContent = '초록색이 되면 클릭하세요'
    }else if(스크린.classList.contains('ready')){
        스크린.classList.remove('ready');
        스크린.classList.add('now');
        스크린.textContent = '클릭하세요!'
    }else if(스크린.classList.contains('now')){
        스크린.classList.remove('ready');
        스크린.classList.add('now');
        스크린.textContent = '클릭해서 시작하세요'
    }
})

만약 이때, class에 새로운 class 값을 준다면, 문제가 생긴다. 

 

이때 이용할 수 있는 것이, classList이다.

 

classList

 

classList를 이용하면 클래스를 조작하는 다양한 메서드들을 쓸 수 있다.
classList.add : 클래스를 필요에 따라 삽입한다.
classList.remove : 클래스를 필요에 따라 제거한다.

 

classList.contains('class명') : 클래스의 값이 존재하는지 체크한다. (true/false)

 

이 메서드를 사용해서 타이틀 클래스에 값을 체크해서 
없으면 waiting을 삽입하고, waiting이 있다면 'ready'로 추가하는 로직을 만든다.

이 classList를 통해 얻을 수 있는 것은 클래스가 변경이 되더라도 추가하거나 제거하기 때문에, 공존이 가능하고

classList를 통해 style이 수백 수천줄이 있더라도 classList 하나를 통해 여러 스타일을 한번에 적용할 수 있어서 좋다. 

 

참고

  • 인프런 - 제로초 강의

 

댓글