[javascript] PhotoSwipe와 연동하여 이미지 흑백 필터링 구현하기
먼저, HTML 파일에 다음과 같이 필터링할 이미지를 포함시키고, 필터를 적용할 버튼을 추가해줍니다.
<div id="my-gallery" 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>
<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>
<button id="apply-filter-btn">Apply Filter</button>
그리고 아래와 같이 CSS 스타일을 추가해줍니다.
.my-gallery img {
max-width: 100%;
height: auto;
}
.filter-applied {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
이제 JavaScript 코드에서 필터를 적용하는 함수를 작성해봅시다.
window.addEventListener('DOMContentLoaded', function() {
var galleryElem = document.getElementById('my-gallery');
var applyFilterBtn = document.getElementById('apply-filter-btn');
// PhotoSwipe 초기화
var gallery = new PhotoSwipe(galleryElem, PhotoSwipeUI_Default, items, options);
// 필터 적용 버튼 클릭 이벤트 핸들러
applyFilterBtn.addEventListener('click', function() {
// 각 이미지에 필터 클래스 추가
var images = galleryElem.querySelectorAll('.pswp__item img');
for (var i = 0; i < images.length; i++) {
images[i].classList.add('filter-applied');
}
});
// 이미지 클릭 시 갤러리 열기
gallery.init();
});
위의 코드에서 applyFilterBtn
클릭 이벤트 핸들러에서는 선택한 이미지에 필터를 적용하기 위해 filter-applied
클래스를 추가해주었습니다. CSS에서 filter-applied
클래스는 이미지를 흑백으로 필터링하는 스타일을 정의하고 있습니다.
이제 필터를 적용할 버튼을 클릭하면 이미지가 흑백으로 변하는 것을 확인할 수 있습니다. PhotoSwipe를 사용하여 이미지 필터링을 구현하는 방법을 살펴보았습니다. 자세한 내용은 PhotoSwipe 문서를 참조하시기 바랍니다.
참고 자료: