공부/Javascript

setInterval 을 이용한 광고창 닫기, 캐러셀 구현

cream_ol 2025. 4. 21. 20:39

 

setTimeout 으로 광고창 닫기

setTimeout() 이란?

: 코드를 바로 실행하지 않고 일정시간 기다린 후 실행해야 하는 경우에 사용할 수 있다.
첫번째 인자로 실행할 코드를 담고있는 함수를 담고 두번째 인자로 시간을 담는데 시간은 밀리초(ms)단위로 받는다.

 

예시)

setTimeout(function() {}, 시간);

setTimeout(function() {
console.log("5초후에 실행됩니다")
}, 5000);
```
**5초 후에 닫히는 광고창을 만들어 보았다.**

```javascript
const adBox = document.querySelector(".ad-box");

setTimeout(() => {
  adBox.style.display = "none";
}, 5000);

 

여기에서 이번에는 setInterval() 을 사용하여 숫자가 카운트다운되는 타이머를 만들어보았다.

setInterval() 이란?

: 지정된 시간 간격마다 지정된 기능을 반복하고자 할 때 사용하고 특정 코드나 주어진 함수를 지정된 간격으로 호출할 수 있다. 이 메소드는 창이 닫히거나 clearInterval() 메소드가 호출될 때 까지 계속 실행되기 때문에 함께 써주어야 한다.

 

예시)

const adBox = document.querySelector(".ad-box");  
const timer = document.querySelector(".timer");  

let count = Number(timer.textContent);  

const intervalId = setInterval(() => {  
  console.log("광고창실행");  
  if (count > 1) {  
    // 0초는 보이지 않게 하기 위해 1로 설정  
    count = count - 1;  
    timer.innerHTML = count;  
  } else {  
    adBox.style.display = "none"; // 화면에서 보이는 창은 사라지지만 컴퓨터에서는 실행중  
    clearInterval(intervalId); // 컴퓨터의 실행을 멈춰줌  
  }  
}, 1000); // 1초에 한번씩 숫자가 줄어듬  

// setInterval을 변수에 할당하여 끝나는 시점에 clearInterval을 실행해야 컴퓨터의 실행을 멈춰줄 수있음

 

clearInterval()을 사용하지 않았을 때 화면에서는 해당 창을 지웠지만

콘솔에서는 계속 찍히고 있는 것을 보여주기 위해 첨부해보았다.

 


캐러셀 구현

캐러셀이란?

: 이미지가 전환되는 모습이 회전목마(Carousel)같다고 해서 붙게된 이름으로 한 영역에서 슬라이드 형태로 하나 이상의 이미지를 볼 수 있는 콘텐츠 또는 페이지를 뜻한다.

애니메이션을 구현하는 순서

  • 애니메이션 발생 전의 모습을 구현한다.
  • 애니메이션이 발생한 후의 모습을 구현한다.
  • css transition을 적용하여 효과를 준다.
  • 해당 효과를 이벤트로 등록한다.

가로형 캐러셀을 구현해보고자 하는데 이때 중요한것은 이미지를 가로로 배치하되

한 화면에 한 이미지만 보이고 그 외의 이미지는 넘어가기 전까지 가려주어야 하는 것이다.

 

한 화면에 한 이미지만 꽉차게 하기 위해서는 css에서 100vw로 설정해주는 것이 좋다.

 

html에 작성한 클래스를 js에서 불러와 변수로 만들었다.

const nextBtn = document.querySelector(".next");
const prevBtn = document.querySelector(".prev");
const slideContainer = document.querySelector(".slide-container");

const slide = document.querySelectorAll(".slide");
const slideCount = slide.length; // 이미지 배열의 개수를 이용하여 슬라이드를 실행해야 이미지가 추가되어도 문제없이 작동할 수 있음
slideContainer.style.width = `${slideCount}00vw`; // 이미지개수 * 100

 

변수를 이용해 슬라이드가 이동할 수 있는 이벤트를 추가하였다.

let nowIndex = 0;
nextBtn.addEventListener("click", function () { // 다음버튼을 클릭했을 때
if (nowIndex >= slideCount - 1) {
return; // return을 넣어야 이미지 개수가 끝났을때 다음페이지로 넘어가는 것을 종료시킬 수있음
}
nowIndex = nowIndex + 1;
slideContainer.style.transform = `translate(-${nowIndex}00vw)`;
}); // 이미지가 왼쪽으로 이동

prevBtn.addEventListener("click", function () {
if (nowIndex <= 0) {
return;
}
nowIndex = nowIndex - 1;
slideContainer.style.transform = `translate(-${nowIndex}00vw)`;
}); // 이미지가 오른쪽으로 이동

 

 

완성된 모습이다