[JavaScript] 타이머

JeaHyuck·2021년 8월 25일
0
post-thumbnail
post-custom-banner
<script>
	//타이머
	var ps = document.querySelectorAll("div.timer");
	ps.forEach(function(timer){
    
            var countDownDate = new Date(timer.querySelector('[class="endDate"]').value).getTime();
            
            var x = setInterval(function() {
            
            var now = new Date().getTime();
            
            var distance = countDownDate - now;
            var days = Math.floor(distance / (1000 * 60 * 60 * 24));
            var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);
                //timer.innerText = days + "일 " + hours + "시 "+ minutes + "분 " + seconds + "초 ";
            timer.querySelector("div.show").innerText = days + "일 " + hours + "시 "+ minutes + "분 " + seconds + "초 ";
            
            if (distance < 0) {
                clearInterval(x);
                timer.innerText = "땡~";
              }
              }, 1000);    
	});
</script>

오늘은 경매 페이지에 각 경매정보마다 종료날짜까지 타이머가 필요했기에

setInterval()를 이용한 1초마다 시간데이터에서 1초가 떨어지게 구현해보았다.

코드는 예제를 보며 클론코딩하였고 완벽하게 숙지하였다.

우선

<script>
	var ps = document.querySelectorAll("div.timer");
</script>

ps는 div 태그안에 class이름이 timer인것들을 모조리 불러와 list형태로 저장된다.
그 후 forEach문으로 리스트 size만큼 function(timer)가 수행되는데

각각의 경매마다 타이머가 존재해야하기때문에

클래스가 timer인것 안에 넣어둔 hidden값인 날짜 데이터를 가져와야하므로

<script>
	var countDownDate = new Date(timer.querySelector('[class="endDate"]').value).getTime();
</script>

input의 hidden 타입인 클래스이름이 endDate의 value값을 가져와서 Date형태로 선언해주었다.

그 후 본격적으로 setInterval() function을 구현하게 되는데
우선 경매가 종료되기까지 남은시간을 보여줘야하므로 종료날짜 - 오늘날짜를 계산 해야하기 때문에

오늘날짜의 시간을 선언해주었다.

그 후 일, 시간, 분, 초 단위로 각각 데이터를 넣어주고
타이머를 보여주는 곳 안에 innerText로 값을 넣어주었다.

당연한거지만 타이머가 종료될때 setInterval은 종료되어야 하므로
타이머가 끝나면 clear시켜주는 로직도 넣어주었다.

profile
기억보단 기록을
post-custom-banner

0개의 댓글