본문 바로가기
Javascript/Clone Website

[Vanilla-JS] 2. 텍스트를 클릭하면 색상이 변경

by 닉우 2020. 8. 2.

클릭을 했을 때 클래스명에 따라 색상이 변경되도록 만들겠다.

기본값 클래스에서 클릭 이벤트가 발생시 클래스명이 바뀌면서 색상도 바뀌는..

 

그리고 cursor: pointer도 클래스를 설정해서 효과를 줄것인데,

문제는 classList에 저장될때 clicked 상태가 돼야 색상이 변경되는데, 

아래처럼 btn clicked 가 되어 색상 변경이 안된다. (한 개의 클래스만 체크가능)

그래서 필요한게 contains라는 객체이다.

contain은 value가 존재 하는지 체크한다.

<HTML>

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>

<body>
    <h1 id="title" class="btn">안녕하세요!</h1>


    <script src="./index.js"></script>
</body>

</html>

<CSS>

body{
    background-color: #ecf0f1;
    margin: 0px;
}

h1{
    text-align: center;
    color: tomato;
    transition: color .5s ease-in-out;
}
.btn{
    cursor: pointer;
}

.clicked {
    color : #7f8c8d;
}

 

<JS 코드>

const title = document.querySelector("#title");
const CLICKED_CLASS = "clicked";
function handleClick() {
    const hasClass = title.classList.contains(CLICKED_CLASS);
    if (!hasClass) {
        title.classList.add(CLICKED_CLASS);
    } else {
        title.classList.remove(CLICKED_CLASS);
    }
}

title.addEventListener("click", handleClick);

function init() {
    handleClick();
}

init();

<실행화면>

 

clicked class가 있냐없냐로 classList에 add , remove하는게 아니라

clicked가 추가되었는지 확인하고 true or false로 조건문을 돌리기 때문에

다른 클래스(btn)가 추가 되어도 문제가 없다.

 

※ 코드를 더 간단하게 만들기 위해서 toggle 함수를 사용해보겠다.

클래스가 있는지 확인해서 추가, 제거를 해준다.

const title = document.querySelector("#title");
const CLICKED_CLASS = "clicked";
function handleClick() {
    title.classList.toggle(CLICKED_CLASS);
}

title.addEventListener("click", handleClick);

function init() {
    handleClick();
}

init();


 

 

 

 

 

 

 

 

 

 

 

※ 본 포스팅은 개인 공부 기록을 목적으로 남긴 글이며 본 사실과 다른 부분이 있다면 과감하게 지적 부탁드립니다.

댓글