ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript/VanillaJS] ์กฐ์šฉํ•œ ์•Œ๋žŒ(silence alarm) ์›น ์•ฑ ๋งŒ๋“ค๊ธฐ - 2
    javascript 2019. 4. 24. 15:18

     

    ์›์›(!) ๋Œ์•„์™”์Šต๋‹ˆ๋‹ค. ์ด์ „์— ํ–ˆ๋˜ CSS, HTML ์†Œ์Šค๋Š” ์—ฌ๊ธฐ์„œ(https://bejerry.tistory.com/15) ํ™•์ธ ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ์†Œ์Šค๊ฐ€ ์žˆ์–ด์•ผ ์›ํ• ํžˆ ๋”ฐ๋ผํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๋ˆ„๊ฐ€? ๋Œ€์ฒด ๋ˆ„๊ฐ€ ์ด๊ฑธ ๋”ฐ๋ผํ•ด?)

     

    ์ง€๋‚œ ์‹œ๊ฐ„

    ๋„ค, ์ด์ „ ๊ธ€์—๋Š” ์‹œ๊ฐ„์„ ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚ด๊ธด ํ–ˆ์Šต๋‹ˆ๋‹ค๋งŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ดˆ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ณ , ๋ถ„์ด ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๊ณ  ๋ฉˆ์ถฐ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ๊ฑด ๋””์ง€ํ„ธ ์‹œ๊ณ„์ฒ˜๋Ÿผ ์‹œ๊ฐ„์ด ๊ฐ€๋Š”๊ฑธ ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ๋•Œ ์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ์€ setInterval( ) ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

     

    setInterval( )

    mdn(https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval)์—์„œ ์•ˆ๋‚ดํ•ด์ฃผ๋Š” ๊ฒƒ์€ scope.setInerval(func, delay) ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ์•„๋ž˜์— ์ฝ”๋“œ๋ธ”๋Ÿญ์œผ๋กœ ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”.

     

    //setInterval(ํ•จ์ˆ˜์ž๋ฆฌ, ๋ฐ€๋ฆฌ์„ธ์ปจ์ดˆ๋‹จ์œ„)
    function hey(){
      setInterval(function(){
      	alert('Did you call me?');
      },1000)
    }
    
    hey();
    

    hey( )ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜์ž๋ฆฌ์— ๋ฐ”๋กœ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ์ง€๋งŒ ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆด๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

     

    ํ•จ์ˆ˜์ž๋ฆฌ(func)๋ฅผ ES6 ๋ฌธ๋ฒ•์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์“ธ๊นŒ์š”? ๊ทธ๋ฆฌ๊ณ  1์ดˆ ํ˜น์€ 2์ดˆ๋งˆ๋‹ค ๊ณ„์† alert ์ฐฝ์ด ๋œจ๋Š”๊ฑธ ๋ณด๊ณ ๋งŒ ์žˆ์„ ์ˆœ ์—†์ฃ . ๊ทธ๋ ‡๋‹ค๊ณ  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ป๋‹ค ํ‚ค๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€๋„ ์žˆ๊ณ ์š”.

     

    ๊ทธ๋ž˜์„œ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ์ข…๋ฃŒ์‹œํ‚ฌ ์ข…๋ฃŒํ•จ์ˆ˜๋„ ์ถ”๊ฐ€ํ•ด์„œ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    
    function hey(){
      //ES6
      interval = setInterval(() => {
      	alert('Did you call me?');
      },2000) // 1์ดˆ์—์„œ 2์ดˆ๋กœ ์‹œ๊ฐ„ ๋Š˜๋ฆผ, ์ข…๋ฃŒํ•จ์ˆ˜ ๋ถ€๋ฅผ ์‹œ๊ฐ„ ๋ฒŒ๊ธฐ.
    }
    
    //clearInterval( ) : ์ธ์ž์—๋Š” setInterval ID๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉฐ(MDN์ฐธ๊ณ ), setInterval( )์„ ์ข…๋ฃŒํ•œ๋‹ค.
    function yes(){
      clearInterval(interval);
    }
    
    hey();
    

     

    ์•„๋ž˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํ™”๋ฉด ์บก์ณ์ž…๋‹ˆ๋‹ค. hey( )๋ฅผ ๋ถˆ๋ €๊ณ (ํ˜ธ์ถœ), Did you call me?(๋‚˜ ๋ถˆ๋ €์–ด?)๋ผ๊ณ  alert์ฐฝ์ด ๋œจ๋„ค์š”.

    ์šฐ๋ฆฌ๋Š” yes( )์„ ์™ธ์ณ์•ผ(ํ˜ธ์ถœ) ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด alert์ด ์šฐ๋ฆฌ๋ฅผ ๊ดด๋กญํž๊ฑฐ์—์š”... ๋น ๋ฅด๊ฒŒ ๋‹ต๋ณ€ํ•˜๊ณ  ๋ฌดํ•œ alert์—์„œ ํ•ด๋ฐฉ๋ฉ์‹œ๋‹ค!

     

    setInterval( ) ์‹คํ–‰ํ™”๋ฉด ์บก์ณ

     

    ์–ด๋– ์‹ ๊ฐ€์š”? ES6 ๋ง›๋ณด๊ธฐ์˜€์Šต๋‹ˆ๋‹ค.  function์ด๋ผ๊ณ  ์ ์–ด์•ผ ํ•  ๊ณณ์— ํŒŒ๋ผ๋ฏธํ„ฐ ๊ด„ํ˜ธ๋งŒ ๋‚จ๊ฒจ๋‘๊ณ  function์€ ์ ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Arrow function์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

     

    ์—ฌ๊ธฐ์„œ ES6 ๋ฌธ๋ฒ•์„ ๋‹ค ์„ค๋ช…๋“œ๋ฆฌ์ง„ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ๋„ ์กด์žฌํ•˜๋ฉฐ ์ถ”ํ›„ ์˜์ƒ์œผ๋กœ ๊ธ€๋ณด๋‹ค ํŽธํ•˜๊ฒŒ ์ ‘ํ•˜์‹œ๊ฒŒ๋” ์ค€๋น„ํ•  ๊ณ„ํš์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค :)

     

    ๊ทธ๋Ÿผ ๋ณธ๋ก ์œผ๋กœ ๋Œ์•„์™€์„œ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ–ˆ๋˜ ์‹œ๊ณ„๋ฅผ setInterval( )์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ์ฃ ? ํ•จ์ˆ˜์ž๋ฆฌ์—” ์ด๋ฏธ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  getTime์„ ๋„ฃ๊ณ  1์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์ดˆ๊ฐ€ ๋ฐ”๋€Œ๋‹ˆ๊นŒ delay๋Š” 1000 milliseconds๋ฅผ ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

     

     

    JS-2
    
    const alarmContainer = document.querySelector('.js-alarm');
    const currentTime = alarmContainer.querySelector('h1');
    function getTime(){
      const date = new Date();
      const hours = date.getHours();
      const minutes = date.getMinutes();
      const seconds = date.getSeconds();
      currentTime.innerText = 
      `${hours < 10 ? `0${hours}` : hours}:${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`;
    }
    
    function init(){
      getTime();
      setInterval(getTime, 1000);
    }
    
    init();
    

    ์–ด? getTime( )์„ ์™œ ๋‘ ๋ฒˆ ๋ถ€๋ฅด๋‚˜์š”?

    setInterval( )๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ 00:00:00์„ ๋จผ์ € ์ถœ๋ ฅํ•˜๊ณ  1์ดˆ ํ›„์— getTime( )์„ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ 1์ดˆ ๋™์•ˆ ๋ธŒ๋ผ์šฐ์ €์—๋Š” ์šฐ๋ฆฌ๊ฐ€ HTML์—์„œ ์ ์—ˆ๋˜ <h1>00:00:00</h1> ํƒœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ  ๊ทธ ๋‹ค์Œ ์‹œ๊ณ„๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.

     

    ์ €๋Š” ๋ณด๊ณ ์‹ถ์ง€ ์•Š์•„์š”, ๋•ก๋•ก์‹œ๋•ก๋•ก๋ถ„๋•ก๋•ก์ดˆ. ๋ฐ”๋กœ ์‹œ๊ฐ„์„ ํ˜ธ์ถœํ•˜๊ณ  1์ดˆ ํ›„์— ๋‹ค์‹œ ์‹œ๊ฐ„์„ ํ˜ธ์ถœํ•ด์„œ ๊ธฐ์กด์— ์ถœ๋ ฅ๋œ ์‹œ๊ฐ„์„ ๋ฎ์–ด๋ฒ„๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  clearInterval( )์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‹œ๊ณ„๊ฐ€ ๋ฉˆ์ถœ ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด์ฃ !

     

    ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๊ณ  ํ™•์ธํ•ด๋ณด์„ธ์š”!

     

     

    ํ™”๋ฉด์„ ๋…นํ™”ํ•˜์ง€ ๋ชปํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

     

    ์›€์งค๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํ™”๋ฉด์„ ๋…นํ™”ํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ ํฌ์ŠคํŒ…์„ ํ•˜๋Š” ๋‹น์žฅ์˜ ์—ฌ๊ฑด์ƒ ๊ทธ๋Ÿด ์ˆ˜ ์—†์—ˆ์œผ๋ฏ€๋กœ ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

     

    ์ผ๋‹จ ์‹œ๊ฐ„์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์›€์ง์ด๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฟŒ๋“ฏํ•จ์ด ์ฐธ ์ข‹๋„ค์š”!

    3ํ•ญ์—ฐ์‚ฐ์ž๋กœ 10๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ ์•ž์— 0์„ ๋ถ™์ด๊ธฐ๋กœ ํ•œ ๊ฑฐ ๊ธฐ์–ต๋‚˜์‹œ๋‚˜์š”? ๊ทธ๊ฒƒ๋„ ์˜ค๋ฅ˜์—†์ด ์ž˜ ๋‚˜์˜ค๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์˜์ƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

     

    ์›น ์•ฑ ๋งŒ๋“ค๊ธฐ 2ํŽธ์€ ์—ฌ๊ธฐ์„œ ๋งˆ์น˜๊ณ  ๋ฐ”๋กœ 3ํŽธ ์ค€๋น„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ์„ค๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๋‹ค๋ณด๋‹ˆ ์ „ํŽธ๋ณด๋‹ค ์–‘์ด ์งง์•„์กŒ์Šต๋‹ˆ๋‹ค. ์‰ฌ๋Š” ํ…€์—†์ด ๋ฐ”๋กœ 3ํŽธ ์ค€๋น„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

     

    ๋Œ“๊ธ€

Posted by Bejerry.