[javascript] Ramjet을 이용한 사진 슬라이더와 슬라이드쇼의 자동 재생 효과

이번에는 Ramjet 라이브러리를 활용하여 사진 슬라이더와 슬라이드쇼의 자동 재생 효과를 만들어 보겠습니다. Ramjet은 자바스크립트 기반의 애니메이션 라이브러리로, 요소 사이의 부드러운 애니메이션 효과를 구현하기에 용이합니다.

사진 슬라이더 만들기

라이브러리를 사용하기 위해 먼저 Ramjet 스크립트 파일을 HTML 문서에 추가합니다. 다음과 같이 <script> 태그를 사용하여 스크립트 파일을 로드할 수 있습니다.

<script src="ramjet.min.js"></script>

이제 슬라이더를 생성하기 위해 HTML 구조를 만들어 보겠습니다. 슬라이더를 감싸는 부모 요소와 이미지들을 담을 자식 요소를 추가합니다.

<div class="slider-container">
  <div class="slider">
    <img src="image1.jpg" alt="Image 1">
    <img src="image2.jpg" alt="Image 2">
    <img src="image3.jpg" alt="Image 3">
  </div>
</div>

CSS를 작성하여 슬라이더가 화면에 나타나도록 스타일링할 수 있습니다.

.slider-container {
  width: 500px;
  height: 300px;
  overflow: hidden;
}

.slider {
  position: relative;
  width: 1500px; /* 이미지의 가로 길이 * 이미지 개수 */
  transition: transform 0.3s ease-in-out;
}

.slider img {
  display: inline-block;
  width: 500px;
  height: 300px;
}

자바스크립트를 사용하여 슬라이더를 제어할 수 있도록 합니다. Ramjet 라이브러리를 활용하여 슬라이드 이동 효과를 구현하고, 자동 재생 기능을 추가하겠습니다.

// 슬라이더 요소와 이미지 개수를 변수로 저장합니다.
const slider = document.querySelector('.slider');
const images = document.querySelectorAll('.slider img');
const imageWidth = images[0].offsetWidth;
const totalImages = images.length;

// 슬라이드 이동 함수
function slideTo(index) {
  const offset = -1 * index * imageWidth;
  ramjet.transform(slider, { left: offset });
}

// 초기 슬라이더 위치 정의
let slideIndex = 0;
slideTo(slideIndex);

// 자동 재생 기능
setInterval(() => {
  slideIndex = (slideIndex + 1) % totalImages;
  slideTo(slideIndex);
}, 3000);

슬라이더를 제어하기 위해 필요한 요소들을 변수로 저장하고, slideTo 함수를 정의하여 슬라이드 이동 효과를 구현합니다. 초기 슬라이더 위치를 정의하고, setInterval 함수를 활용하여 일정 시간마다 자동으로 슬라이드를 이동시키는 기능을 추가합니다.

슬라이드쇼로 자동 재생하기

위에서 구현한 슬라이더를 이용하여 슬라이드쇼 효과를 보여주는 방법도 있습니다. 슬라이더의 이미지를 일정 간격으로 순차적으로 전환하는 기능을 구현해 보겠습니다.

// 슬라이드쇼 기능
let slideIndex = 0;
slideTo(slideIndex);

setInterval(() => {
  slideIndex = (slideIndex + 1) % totalImages;
  slideTo(slideIndex);
}, 3000);

위에서 구현한 자동 재생 기능을 그대로 활용하여, 슬라이더 이미지를 일정 간격으로 전환하도록 설정합니다.

결론

Ramjet 라이브러리를 활용하여 사진 슬라이더와 슬라이드쇼의 자동 재생 효과를 간단하게 구현해 보았습니다. 이를 기반으로 다양한 슬라이더 및 애니메이션 효과를 구현할 수 있으니, 참고하여 웹 페이지의 사용자 경험을 향상시키는데 활용해 보시기 바랍니다.

참고 자료