ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript/VanillaJS] ์กฐ์šฉํ•œ ์•Œ๋žŒ(silence alarm) ์›น ์•ฑ ๋งŒ๋“ค๊ธฐ - 4
    javascript 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 ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ ๋ณผ๊นŒ์š”?

     

    1) ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ์„ค์ • ์‹œ๊ฐ„์ด ๋‹ค๋ฅผ ๋•Œ div์˜ class list

     

     

    ์‹œ๊ฐ„์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋ฉด ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์–ด์š”. ์˜คํžˆ๋ ค else ๋ฌธ์— remove๋ฅผ ํ•˜๊ฒ ๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ ์—†๊ธฐ๋„ ์—†๋Š” ๊ฑฐ์ง€๋งŒ ๊ณ„์† ์ง€์šฐ๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ ๊นŒ์š”?

     

    ๊ทธ๋Ÿผ ์ด์ œ ์‹œ๊ฐ„์ด ๊ฐ™์„ ๋•Œ๋ฅผ ํ•œ ๋ฒˆ ๋ณผ๊ฒŒ์š”. (๋นจ๊ฐ„ ํ™”๋ฉด์ด ๊ณ„์† ๊นœ๋นก์ด๋Š”๋ฐ ํ™”๋ฉด์ด ํ•˜์–˜์งˆ ๋•Œ ์บก์ฒ˜ํ•˜๋ ค๊ณ  ์ง‘์ค‘ํ–ˆ๋”๋‹ˆ ๋ˆˆ์ด ์•„ํ”„๋„ค์š”.)

     

    2) ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ์„ค์ • ์‹œ๊ฐ„์ด ๊ฐ™์„ ๋•Œ div์˜ class list

     

    ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ์„ค์ • ์‹œ๊ฐ„์„ ๊ฐ™๊ฒŒ ํ–ˆ๋”๋‹ˆ class list์— alarmOn์ด๋ผ๋Š” class๋ช…์ด ์ถ”๊ฐ€๋˜์—ˆ์–ด์š”!

    ๊ทธ๋Ÿผ css์—์„  ์ € div์— animation์„ ๊ณ„์† ๋จน์ด๊ฒ ์ฃ ? (๋จน์ธ๋‹ค๊ณ  ํ•ด์•ผ ํ•˜๋‚˜;)

     

    ๊ทธ๋Ÿผ ์˜์ƒ์œผ๋กœ ํ™•์ธํ•ด๋ณผ๊ฒŒ์š” :)

    (์˜์ƒ์„ ์ค€๋น„ํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ง„์งœ ํ–ˆ์–ด์š”. ๋ญ”๊ฐ€ ๋ฟŒ๋“ฏํ•ฉ๋‹ˆ๋‹ค!)

     

     

    classList๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ ์ธํ•ด html ์ฝ”๋“œ์— ์˜ํ–ฅ์ด ๊ฐ€๋Š”๊ฑธ ํ™•์ธํ•˜๋Š” ์˜์ƒ

     

    ์ถ•ํ•˜๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์šฐ๋ฆฐ ์ด๋ ‡๊ฒŒ 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

     

    ๋Œ“๊ธ€

Posted by Bejerry.