[javascript] PhotoSwipe를 이용한 이미지 투명 배경 효과 구현 방법

PhotoSwipe는 모바일 및 데스크톱에서 터치, 스와이프 및 확대 / 축소 등의 제스처를 사용하여 이미지를 표시하고 탐색할 수 있는 JavaScript 라이브러리입니다. 이 라이브러리를 사용하여 이미지 투명 배경 효과를 구현하는 방법에 대해 알아보겠습니다.

PhotoSwipe 설치하기

PhotoSwipe를 사용하기 위해서는 먼저 설치하여 프로젝트에 추가해야 합니다. NPM을 사용하거나 직접 파일을 다운로드하여 사용할 수 있습니다. 아래는 NPM을 통해 PhotoSwipe를 설치하는 방법입니다.

npm install photoswipe
npm install photoswipe/dist/photoswipe-ui-default

HTML 마크업 준비하기

PhotoSwipe를 사용하기 위해 HTML 파일에 이미지를 감싸는 마크업을 추가해야 합니다. 일반적으로 div 요소를 사용하며, 이미지를 클릭할 때마다 효과가 나타나도록 data-pswp-uid 속성을 설정해 줍니다.

<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
  <div class="pswp__bg"></div>
  <div class="pswp__scroll-wrap">
    <div class="pswp__container">
      <div class="pswp__item"></div>
      <div class="pswp__item"></div>
      <div class="pswp__item"></div>
    </div>
    <div class="pswp__ui pswp__ui--hidden">
      <div class="pswp__top-bar">
        <div class="pswp__counter"></div>
        <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
        <button class="pswp__button pswp__button--share" title="Share"></button>
        <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
        <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
        <div class="pswp__preloader">
          <div class="pswp__preloader__icn">
            <div class="pswp__preloader__cut">
              <div class="pswp__preloader__donut"></div>
            </div>
          </div>
        </div>
      </div>
      <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
        <div class="pswp__share-tooltip"></div>
      </div>
      <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button>
      <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button>
      <div class="pswp__caption">
        <div class="pswp__caption__center"></div>
      </div>
    </div>
  </div>
</div>

<!-- 이미지를 감싸는 요소 -->
<div class="image-container" data-pswp-uid="1">
  <img src="image1.jpg" alt="Image 1">
</div>
<div class="image-container" data-pswp-uid="2">
  <img src="image2.jpg" alt="Image 2">
</div>
<div class="image-container" data-pswp-uid="3">
  <img src="image3.jpg" alt="Image 3">
</div>

JavaScript 코드 작성하기

PhotoSwipe를 초기화하고 이벤트 핸들러를 설정하기 위해 JavaScript 코드를 작성해야 합니다. 아래는 initPhotoSwipeFromDOM 함수를 통해 PhotoSwipe를 초기화하는 코드입니다.

function initPhotoSwipeFromDOM(gallerySelector) {
  // 모든 이미지 컨테이너를 가져옴
  var galleryElements = document.querySelectorAll(gallerySelector);

  // 이미지 효과를 적용할 때마다 실행할 함수 정의
  var onContainerClick = function(event) {
    // 현재 클릭한 이미지의 인덱스를 가져옴
    var index = event.target.getAttribute('data-pswp-uid');

    // 이미지 배열 생성
    var items = [];
    galleryElements.forEach(function(galleryElement) {
      var img = galleryElement.querySelector('img');
      var item = {
        src: img.getAttribute('src'),
        w: img.naturalWidth,
        h: img.naturalHeight,
        title: img.getAttribute('alt')
      };
      items.push(item);
    });

    // PhotoSwipe 초기화
    var pswpElement = document.querySelector('.pswp');
    var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, {index: index});
    gallery.init();
  };

  // 각 이미지 컨테이너에 클릭 이벤트 핸들러 등록
  galleryElements.forEach(function(galleryElement) {
    galleryElement.addEventListener('click', onContainerClick);
  });
}

// 초기화 코드 실행
window.onload = function() {
  initPhotoSwipeFromDOM('.image-container');
};

사용자 정의 CSS 적용하기

PhotoSwipe를 사용하는 동안 원하는 스타일을 적용하기 위해 CSS를 사용할 수 있습니다. PhotoSwipe 클래스 및 하위 요소의 스타일을 수정하면 됩니다. 아래는 예제 CSS 코드입니다.

/* 투명 배경 설정 */
.pswp {
  background-color: rgba(0, 0, 0, 0.85);
}

/* 이미지 컨테이너 스타일 설정 */
.image-container {
  cursor: pointer;
}

/* 선택된 이미지 강조 표시 */
.image-container.selected {
  border: 2px solid #ff0000;
}

결론

이제 PhotoSwipe를 사용하여 이미지 투명 배경 효과를 구현하는 방법을 알게 되었습니다. 이를 통해 사용자들이 웹페이지에서 이미지를 더욱 편리하게 탐색할 수 있게 됩니다. PhotoSwipe를 사용하면 다양한 제스처와 효과를 적용하여 UX를 향상시킬 수 있으므로, 프로젝트에 적용해 보는 것을 권장합니다.