본문 바로가기

WINK-(Web & App)/HTML & CSS & JS 스터디

[2024 신입부원 기초 스터디] 박건민 #6주차 웹 기초 스터디 마무리~

반응형

Date 객체

  • 날짜와시간(년,월,일,시,분,초,밀리초)을위한메소드를제공하는빌트인 객체, 생성자 함수
  • 시간메소드:getHours(),getMinutes(),getSeconds()...
  • 날짜메소드:getFullYear().getMonth(),getDate()...

 

innerTextinnerHTML

  • innerText: Element의 속성으로, 해당 Element 내에서 사용자에게
  • 보여지는 텍스트 값을 가져오거나 설정 가능
  • innerHTML: Element의 속성으로, 해당 Element의 HTML, XML을 가져오거나 설정 가능
// innerText 사용
// 스타일 적용되지 않은 기본 폰트로 <div style='color:red'>innerText</div> 출력
const innerT = document.getElementById('innerT');
innerT.innerText = "<div style='color:red'>innerText</div>";
console.log(innerT);

// innerHTML 사용
// 스타일 적용된 빨간색 폰트로 innerHTML 출력
const innerH = document.getElementById('innerH');
innerH.innerHTML = "<div style='color:red'>innerHTML</div>";
console.log(innerH);

 

 

setTimeout( )

  • 특정 시간이 지난 다음에 코드를 실행하는 함수
  • 1s = 1,000 ms
  • ex) 3s = 3,000 ms
// 2초가 지난 후, “Hello World” 출력 setTimeout(function(){
console.log("Hello World");
}, 2000);

 

 

setInterval()

  • 특정 코드를 지정한 시간 간격마다 반복해서 실행하는 함수
  • setTimeout()는 한 번만 실행, setInterval()은 정해진 시간마다 반복하여 실행
setInterval(function() {
console.log("WINK");
}, 1000); // 1초마다 “WINK” 출력

 

 

W

clearInterval()

  • setInterval()로 설정한 반복 실행을 중지하는 데 사용하는 함수
var interval = setInterval(function() {
  console.log("WINK");
}, 1000); // 1초마다 "WINK" 출력

clearInterval(interval);
// 현재 진행되고 있는 함수의 진행을 멈춤

 

 

실습 ~

Index.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="./style.css">
</head>
<body>
    <div class="wrapper">
        <h1>WINK StopWatch</h1>
        <h2>20212992 박건민</h2>
        <div class="time"><span id="seconds">00</span>:<span id="tens">00</span></div>
        <button id="button-start" onclick="buttonStart()">Start</button>
        <button id="button-stop" onclick="buttonStop()">Stop</button>
        <button id="button-reset" onclick="buttonReset()">Reset</button>
    </div>

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

 

 

index.js

let seconds = 0;        // 스톱워치 ':' 왼쪽 부분
let tens = 0;           // 스톱워치 ':' 오른쪽 부분
let interval;           // interval 정보 담아둘 변수
let isTimerRunning;     // flag 변수

// Start 버튼 클릭시 처리
const buttonStart = () => {
    // Start 버튼 연속 클릭 방지 용도
    if (isTimerRunning) return;

    // setInterval 설정 (스톱워치 ':' 오른쪽 부분에서 10ms ~ 990ms만 보여주기 때문에 interval 주기를 10ms로 하기)
    interval = setInterval(startTimer, 10);

    // flag 변수 설정
    isTimerRunning = true;
}

// Stop 버튼 클릭시 처리
const buttonStop = () => {
    // interval 정지 및 flag 변수 설정
    clearInterval(interval);
    isTimerRunning = false;
}

// Reset 버튼 클릭시 처리
const buttonReset = () => {
    // 스톱워치가 정지 중인 경우에만 리셋돼야 함. (flag 변수 사용)
    if (!isTimerRunning) {
    // 시간 초기화 및 스톱워치 00:00 으로 설정
        seconds = 0;
        tens = 0;
        document.getElementById("seconds").innerText = "00";
        document.getElementById("tens").innerText = "00";
    }
}

// interval로 사용할 함수
// 먼저 1 tens(10ms)를 증가시키고, 그에 따라 00:00 형식에 맞게 수정하는 방식
const startTimer = () => {
    tens++;

    // tens가 1자리 수인 경우
    if (tens <= 9) {
        // ':' 오른쪽 부분 수정
        document.getElementById("tens").innerText = "0" + tens;
    }

    // tens가 2자리 수인 경우
    if (tens > 9) {
        // ':' 오른쪽 부분 수정
        document.getElementById("tens").innerText = tens;
    }

    // tens가 3자리 수가 된 경우
    if (tens == 100) {
        seconds++;
        tens = 0;

        // ':' 오른쪽 부분 수정
        document.getElementById("tens").innerText = "00";

        if (seconds <= 9) {      // seconds가 1자리인 경우
            // ':' 왼쪽 부분 수정
            document.getElementById("seconds").innerText = "0" + seconds;
        } else {                 // seconds가 2자리 이상인 경우
            // ':' 왼쪽 부분 수정
            document.getElementById("seconds").innerText = seconds;
        }
    }
}

 

 

style.css

/* CSS */

body {
    background: rgba(59,130,246,.5);
    font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
    height: 100%;
}

.wrapper {
    width: 800px;
    margin: 30px auto;
    color: #000080;
    text-align: center;
}

h1, h2, h3 {
    font-family: 'Roboto', sans-serif;
    font-weight: 500;
    font-size: 2.6em;
    text-transform: uppercase;
}

h1 {
    margin-top: 100px;
}

.time {
    margin-bottom: 50px;
}

#seconds, #tens {
    font-size: 2em;
}

button {
    -moz-border-radius: 5px; /* Replaced mixin */
    -webkit-border-radius: 5px; /* Replaced mixin */
    border-radius: 5px; /* Replaced mixin */
    -khtml-border-radius: 5px; /* Replaced mixin */
    background: rgba(59,130,246,.5);
    color: #fff; /* Replaced by $white */
    border: solid 1px #fff; /* Replaced by $white */
    text-decoration: none;
    cursor: pointer;
    font-size: 1.2em;
    padding: 18px 10px;
    width: 180px;
    margin: 10px;
    outline: none;
    -webkit-transition: all 0.5s ease-in-out; /* Replaced mixin */
    -moz-transition: all 0.5s ease-in-out; /* Replaced mixin */
    transition: all 0.5s ease-in-out; /* Replaced mixin */
}

button:hover {
    -webkit-transition: all 0.5s ease-in-out; /* Replaced mixin */
    -moz-transition: all 0.5s ease-in-out; /* Replaced mixin */
    transition: all 0.5s ease-in-out; /* Replaced mixin */
    background: #fff; /* Replaced by $white */
    border: solid 1px #fff; /* Replaced by $white */
    color: rgba(59,130,246,.5);
}​

 

 

결과

끝 ~~~~~~~~

반응형