이재호
랜덤색깔 버튼 만들기 본문
학습한 내용을 복습하기 위해 블로그를 작성합니다.
addEventListener 를 이용하여 버튼을 클릭했을때 배경색과 글자색이 변하게 만들어보겠습니다.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Events and This</title>
<style>
button {
width: 100px;
height: 100px;
margin: 20px;
}
</style>
</head>
<body>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<script src="app.js"></script>
</body>
</html>
app.js
// 랜덤색깔을 나타낼수 있게 해주는 함수
const makeRandColor = () => {
const r = Math.floor(Math.random() * 255);
const g = Math.floor(Math.random() * 255);
const b = Math.floor(Math.random() * 255);
return `rgb(${r}, ${g}, ${b})`;
}
const buttons = document.querySelectorAll('button')
for(let btns of buttons){
btns.addEventListener('click', () =>{
btns.style.backgroundColor = makeRandColor();
btns.style.color = makeRandColor();
})
}
h1 태그도 몇개 생성해서 동일한 작업을 해보자!
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Events and This</title>
<style>
button {
width: 100px;
height: 100px;
margin: 20px;
}
</style>
</head>
<body>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<button>CLICK</button>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<h1>hello world</h1>
<script src="app.js"></script>
</body>
</html>
app.js
const makeRandColor = () => {
const r = Math.floor(Math.random() * 255);
const g = Math.floor(Math.random() * 255);
const b = Math.floor(Math.random() * 255);
return `rgb(${r}, ${g}, ${b})`;
}
const h1 = document.querySelectorAll('h1')
for(let h1s of h1){
h1s.addEventListener('click', () =>{
h1s.style.backgroundColor = makeRandColor()
h1s.style.color = makeRandColor()
})
}
그런데 버튼과 h1을 작성하다보니 불편한게 있다
btns.style.backgroundColor = makeRandColor();
btns.style.color = makeRandColor();
h1s.style.backgroundColor = makeRandColor()
h1s.style.color = makeRandColor()
버튼코드와 h1 태그가 서로 중복되고 있는걸 볼수있다 이걸 해결해줄수 있는 방법이 있는데 이때 this 키워드가 등장한다
- 이벤트DOM에서 this는 해당 요소를 참조하며 , 실행 컨텍스트나 발동 컨텍스트에 좌우됩니다.
따라서 중복되는 코드를 함수로 따로 빼줍니다.
function colorRize(){
this.style.backgroundColor = makeRandColor()
this.style.color = makeRandColor()
}
그리고 기존 코드를 수정해줍니다.
// btn code
const buttons = document.querySelectorAll('button')
for(let btns of buttons){
btns.addEventListener('click', colorRize)
}
// h1 code
const h1 = document.querySelectorAll('h1')
for(let h1s of h1){
h1s.addEventListener('click', colorRize)
}
중복되었던 코드를 지우고 두번째 인수로 this키워드를 작성했던 함수를 추가하였습니다 여기서 this는 btns, h1s를 참조하며
기존 코드와 동일하게 작동합니다.
this는 아직도 햇갈린다 ㅎㅎ...
'프론트엔드 > 자바스크립트' 카테고리의 다른 글
간단한 스코어 게임 만들기 (0) | 2023.02.15 |
---|---|
간단한 폼 리스트 만들기 (0) | 2023.02.14 |
Dom을 이용해서 포켓몬 도감 만들기 (0) | 2023.02.13 |
브라우저에서 버튼 100개 만들어보기 ☑️ (0) | 2023.02.13 |
querySelectorAll 을 사용해 무지개 글자를 만들어 보자 🌈 (0) | 2023.02.13 |