-
[JavaScript/VanillaJS] ์กฐ์ฉํ ์๋(silence alarm) ์น ์ฑ ๋ง๋ค๊ธฐ - 4javascript 2019. 4. 26. 22:08
์๋ ํ์ธ์, Jerry์ ๊ณต๋ถ๋ฐฉ์์ ์น ์ฑ์ ๋ง๋ค์ด๋ณด๋ ์๊ฐ์ ๊ฐ๊ณ ์๋ Jerry์ ๋๋ค.
๋ธ๋ก๊ทธ์ ํฌ์คํธ ๋ฆฌ์คํธ๋ฅผ ๋ณด๋ ์ธ๋ค์ผ(๋ํ ์ด๋ฏธ์ง)๋ค์ด ์ ๋ถ ๋ง์์ ์ ๋ค๋๋ผ๊ณ ์. ๋ฐ๋ก ์ธ๋ค์ผ์ฉ ์ด๋ฏธ์ง๋ฅผ ํ๋ ์ ์ํ๋๊ฐ ํด์ผ๊ฒ ์ด์.
๋ฒ์จ 4ํธ์ ๋๋ค. ์๋ ๊ณํ์ 3ํธ ์์ ๋๋ด๋ ๊ฑฐ์๋๋ฐ ํธ๋ฝํธ๋ฝํ์ง ์๋ค์. ํฌ์คํ ํ๋ ์๊ฐ์๊ฐ๋ง๋ค ์ถ๊ฐ์ ์ผ๋ก ๋ฌด์์ด๋ ์ค๋ช ํ๋ ค๊ณ ํด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ์ต๋๋ค :) ์ข์ ์์ธ๋ผ๊ณ ์ค์ค๋ก๋ฅผ ์๋กํ๊ณ ์์ต๋๋ค.
์ด์ ํฌ์คํ ๋ค์ ๋งํฌ๋ฅผ ์๋ดํ๊ณ ์์ํ ๊ฒ์.
์กฐ์ฉํ ์๋ ์น ์ฑ ๋ง๋ค๊ธฐ - 1, ์กฐ์ฉํ ์๋ ์น ์ฑ ๋ง๋ค๊ธฐ - 2, ์กฐ์ฉํ ์๋ ์น ์ฑ ๋ง๋ค๊ธฐ - 3 ์ ๋๋ค.
3ํธ์ ์์ค๋ฅผ ์ญ์ฑ ์ฝ์ด๋ณด์๊ณ ์ดํดํ์๋ ๊ฒ ์ค์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ CSS์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ์๊น์ด ๊น๋นก์ด๊ฒ ํด ๋ณด์์!
CSS
/* ๊ธฐ๋ณธ css์ฝ๋์ ์ถ๊ฐ */ .alarmOn { animation: blink 1s step-end infinite; } /* for Chrome, Safari */ @-webkit-keyframes blink { 0% {background-color: red;} 50% {background-color: white;} }
css์์ .(dot)์ ์์ ์ฐ๋ ๊ฒฝ์ฐ๋ javascript์ ๊ฐ์ต๋๋ค. ๋ค, ๊ทธ๋ ์ฃ . class๋ช ์์ ์ฌ์ฉํฉ๋๋ค. ๊ทผ๋ฐ ์ฐ๋ฆฌ๋ alarm.html์ ๋ค์ ๋ณผ ํ์๊ฐ ์์ต๋๋ค. ์ ๋ค์ ๋ด์ผ ํ๋? ์ฐ๋ฆฌ๋ alarmOn์ด๋ผ๋ class๋ฅผ ๋ง๋ ์ ์ด ์์ต๋๋ค. ํ์ธํด๋ณด์ค๊น์? 1ํธ(https://bejerry.tistory.com/15)์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ alarmOn์?
์ด์ classList๋ผ๋ ๊ฐ์ฒด๋ฅผ ์๊ฐํด๋๋ฆฌ๋ ค๊ณ ํฉ๋๋ค.
classList
/* ๊ธฐ์กด ์ฝ๋ if(current === setValue){ console.log(current, setValue); // 13:30, 13:30 } */ // ๋ณ๊ฒฝ ์ฝ๋ if(current === setValue){ alarmContainer.classList.add('alarmOn'); } else { alarmContainer.classList.remove('alarmOn'); }
๊ธฐ์กด์ console.log๋ฅผ ์ฐ์๋ if( ) ๋ฌธ์ ๋๋ค. ํ์ฌ ์๊ฐ๊ณผ ์ค์ ์๊ฐ(์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ)์ด ๊ฐ๋ค๋ฉด? console์ log๋ฅผ ๋จ๊ฒผ์์ฃ , ์ด์ ์ฐ๋ฆฌ์ ์๋ ๊ณํ์ธ ์๊น์ ๋ฃ๊ณ ๊น๋นก์ด๊ฒ ํด์ผ ํฉ๋๋ค.
์๊น css์ ์ถ๊ฐํ ์ฝ๋ ๊ธฐ์ต๋์๋์? class๋ช alarmOn์ผ๋ก ๋ง๋ค์์์ต๋๋ค. ๊ทธ๋ผ ๊น๋นก์ฌ์ผ ํ div์ ํด๋น class๋ช ์ ๋ฃ์ด์ฃผ๋ฉด ๋๊ฒ ์ฃ . ์ด๋ classList์ ๋๋ค.
classList์ ์ด๋ค ๋ฉ์๋๋ค์ด ์๋์ง ์ดํด๋ณผ๊น์? ์ ๊ฐ ์ฐธ๊ณ ์๋ฃ๋ก ๊ฐ์ฅ ๋ง์ด ์ฐ๊ณ ์๋ Mozilla ์ ์๋์ ๋๋ค :) Element.classList - MDN ์ง์ ์ดํด๋ณด์ ๋ ๋๊ณ ์. ์ ๊ฐ ๋ฐ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํด๋ดค์ต๋๋ค.
- add( String [, String] ) : ํน์ ํด๋์ค ๊ฐ์ ์ถ๊ฐํ๋ค. ๋ง์ฝ ์์์ ์์ฑ์ ์ถ๊ฐํ๋ ค๋ ํด๋์ค๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ฌด์๋๋ค.
- remove( String [, String]) : ํน์ ํด๋์ค ๊ฐ์ ์ ๊ฑฐํ๋ค.
- item( Number ) : ํด๋์ค ๊ฐ์ ์ปฌ๋ ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๋ฐํํ๋ค.
- toggle( String [, force] ) :
1. ํ ๊ฐ์ ์ธ์๋ง ์์ ๋ : ํด๋์ค ๊ฐ์ ๋ณํํ๋ค. ์ฆ ํด๋์ค๊ฐ ์กด์ฌํ๋ค๋ฉด ์ง์ฐ๊ณ false๋ฅผ ๋ฐํํ๋ฉฐ, ์กด์ฌํ์ง ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ถ๊ฐํ๊ณ true๋ฅผ ๋ฐํํ๋ค.
2. ๋ ๋ฒ์งธ ์ธ์๊ฐ ์์ ๋ : ๋ ๋ฒ์งธ ์ธ์๊ฐ true๋ก ํ๊ฐ๋๋ฉด ํน์ ํด๋์ค ๊ฐ์ ์ถ๊ฐํ๊ณ false๋ก ํ๊ฐ๋๋ฉด ์ง์ด๋ค.
- contains( String ) : ํน์ ํด๋์ค ๊ฐ์ด ์์์ ํด๋์ค ์์ฑ์ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
- replace( oldClass, newClass ) : ๊ธฐ์กด์ ํด๋์ค๋ฅผ ์๋ก์ด ํด๋์ค๋ก ๊ต์ฒดํฉ๋๋ค.
์ฐ๋ฆฌ๋ add( )์ remove( )๋ฅผ ์ฌ์ฉํ ๊ฑฐ์์. ์ฃผ๋ก ๋ง์ด ์ฐ์ด๋ ๋ฉ์๋์ ๋๋ค.
alarmContainer.classList.add('alarmOn');
alarmOn์ด๋ผ๋ ์ด๋ฆ์ผ๋ก class list์ ์ถ๊ฐํ๊ฒ ๋ค๋ ๊ฑฐ๋๊น ์๊ดํธ() ์์ string์ ์ ์ ๋ .(dot)์ ๋ถํ์ง ์์๋ ๋ผ์. ์ด๋์ ์ถ๊ฐ๋ฅผ ํ๋? alarmContainer๋ผ๋ ๋ณ์์ ์ฐ๋ฆฌ๋ class๋ช ์ js-alarm์ผ๋ก ํ div๋ฅผ ๋ด์์์ฃ ? ๊ฑฐ๊ธฐ์ ์ถ๊ฐ๋ฅผ ํ๊ฒ ๋ค๋ ๊ฑฐ์์. ๊ทธ๋ผ ์ถ๊ฐ๋ html ์ฝ๋๋ฅผ ํ ๋ฒ ๋ณผ๊น์?
์๊ฐ์ ๋ค๋ฅด๊ฒ ํ๋ฉด ์ถ๊ฐ๋์ง ์์ ๊ฑธ ์ ์ ์์ด์. ์คํ๋ ค else ๋ฌธ์ remove๋ฅผ ํ๊ฒ ๋ค๊ณ ํ์ผ๋ ์๊ธฐ๋ ์๋ ๊ฑฐ์ง๋ง ๊ณ์ ์ง์ฐ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊น์?
๊ทธ๋ผ ์ด์ ์๊ฐ์ด ๊ฐ์ ๋๋ฅผ ํ ๋ฒ ๋ณผ๊ฒ์. (๋นจ๊ฐ ํ๋ฉด์ด ๊ณ์ ๊น๋นก์ด๋๋ฐ ํ๋ฉด์ด ํ์์ง ๋ ์บก์ฒํ๋ ค๊ณ ์ง์คํ๋๋ ๋์ด ์ํ๋ค์.)
ํ์ฌ ์๊ฐ๊ณผ ์ค์ ์๊ฐ์ ๊ฐ๊ฒ ํ๋๋ class list์ alarmOn์ด๋ผ๋ class๋ช ์ด ์ถ๊ฐ๋์์ด์!
๊ทธ๋ผ css์์ ์ div์ animation์ ๊ณ์ ๋จน์ด๊ฒ ์ฃ ? (๋จน์ธ๋ค๊ณ ํด์ผ ํ๋;)
๊ทธ๋ผ ์์์ผ๋ก ํ์ธํด๋ณผ๊ฒ์ :)
(์์์ ์ค๋นํ๋ค๊ณ ํ๋๋ฐ ์ง์ง ํ์ด์. ๋ญ๊ฐ ๋ฟ๋ฏํฉ๋๋ค!)
์ถํ๋๋ฆฝ๋๋ค! ์ฐ๋ฆฐ ์ด๋ ๊ฒ DOM(Document Object Model)์ ๋ค๋ฃฌ๊ฑฐ์์ :)
๋ญ๊ฐ ๋นจ๊ฐ๊ฒ ๋ฒ์ฉ๋ฒ์ฉํ๋๊น ์๋๊ฐ์ฃ ? ์ด์ ์ ์ฐฝ์ ๋์๋ณด๋ ์ผ๋ง ๋จ์๋ค์. 3ํธ ๋ง์ง๋ง์ ์ ๊ฐ ๋๋ฆฐ ๋ง์ ๊ธฐ์ตํ์๋์? 4ํธ๋ถํด ์ฌ๋ฐ์๊ฑฐ๋ค! ์ฌ๋ฏธ์์ผ์ จ์ฃ ? ๋ฒ์ฉ๊ฑฐ๋ฆฌ๊ณ ๋ญ๊ฐ ์๊ฒผ๋ค, ์์ด์ก๋คํ๊ณ !
5ํธ์์ ์ ์ฐฝ์ ๋์ฐ๋ ์์ ์ ํ๋๊น ์๋ง 5ํธ์ด ์ข ํธ์ด์ง ์์๊น ์ถ์ต๋๋ค. ์ง๊ธ๊น์ง ๋ค ์ฝ์ด์ฃผ์ ๋ถ๋ค์๊ฒ ๋๋ฌด ๊ฐ์ฌ๋๋ฆฌ๊ณ ๋ง์ง๋ง ํ ํธ๊น์ง ์์์~ ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค!
[์์ ์ BGM ์ ๋ณด]
Music: ”I Don’t Need U 2 Say Anything” by Le Gang.
Le Gang on Spotify:
spoti.fi/2Nqx1E1
Le Gang on Apple Music:
apple.co/2tCxx8M
Le Gang on Soundcloud:
@thisislegang
Le Gang on YouTube:
bit.ly/2Th5V7E'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ