Svelte 및 SvelteKit에서 사용 가능한 이미지 뷰어 컴포넌트입니다.
컴포넌트에 대한 자세한 설명은 여기에서: https://blog.hmlee.me/board/development/73/
이미지 뷰어 내 아이콘 렌더링을 위해 Font Awesome 아이콘을 사용합니다. Font Awesome 아이콘을 사용하기 위해서는 @fortawesome/fontawesome-svg-core, @fortawesome/free-solid-svg-icons, @fortawesome/svelte-fontawesome 패키지를 설치해야 합니다.
npm install @fortawesome/fontawesome-svg-core @fortawesome/free-solid-svg-icons @fortawesome/svelte-fontawesome
페이지 내 이미지 목록을 스토어로 저장하고, 이미지 뷰어 컴포넌트에서 해당 스토어를 구독하여 이미지를 렌더링하는 방식으로 사용합니다.
이미지 뷰어를 추가하고자 하는 부모 컴포넌트 또는 페이지에 이 컴포넌트를 불러옵니다.
client-config.svelte 파일에서 imgViewerStatusStore 스토어를 구독하여 이미지 뷰어의 상태를 관리할 수 있습니다.
이미지 목록을 스토어에 저장하고 가져오려면 types.ts 파일에 정의된 타입을 참고하여 이미지 객체 배열을 생성하여 저장합니다.
<script>
import ImageViewer from '[path-to-image-viewer]/ImageViewer.svelte';
import { imgViewerStatusStore } from "[path-to-client-config]/client-config.svelte";
</script>
<ImageViewer bind:imgViewerStatus={imgViewerStatus} SSRImageView={SSRImageView} />
imgViewerStatus: 이미지 뷰어의 상태와 전체 이미지 배열, 현재 이미지를 나타내는 객체입니다. client-config.svelte 파일에서 정의된 imgViewerStatusStore 스토어를 구독하여 관리할 수 있습니다.SSRImageView: SSR 환경에서 이미지를 렌더링하기 위한 컴포넌트입니다. SSR 환경에서 이미지를 렌더링할 때 사용됩니다.이미지 객체는 다음과 같은 구조를 가집니다:
export interface ImageViewerStatus {
isOpen: boolean;
currentSrc?: string;
images: { src: string; alt: string; uuid: string }[];
}
isOpen: 이미지 뷰어가 열려 있는지 여부를 나타냅니다.currentSrc: 현재 뷰어에 표시되고 있는 이미지의 소스입니다.images: 이미지 뷰어에 표시할 이미지 객체 배열입니다. 각 이미지 객체는 src, alt, uuid 속성을 가집니다. src는 이미지의 소스 URL, alt는 이미지의 대체 텍스트, uuid는 이미지의 고유 식별자입니다.SSR 환경에서 이미지 뷰어를 렌더링하기 위해 사용되는 Props입니다.
<script>
import { page } from '$app/state';
let SSRImageView = $derived(page.url.searchParams.get('imgview'));
</script>
해당 Props 값은 page를 구독하여 현재 페이지의 URL에서 imgview 검색 매개변수를 가져와 설정됩니다. 이 값을 통해 SSR 환경에서 이미지 뷰어가 렌더링될 때 사용할 이미지를 지정할 수 있습니다.
pathname은 그대로 두고 imgview 검색 매개변수에 이미지의 src를 전달하여 해당 이미지를 뷰어에서 렌더링할 수 있습니다. 예를 들어, http://example.com/page?imgview=123e4567-e89b-12d3-a456-426614174000와 같이 URL을 구성하면, imgview 매개변수에 지정된 UUID를 가진 이미지가 뷰어에서 렌더링됩니다. (값은 컴포넌트 내 <img> 태그의 src 속성에 전달됩니다.)
SSR 렌더링을 고려하지 않을 경우 SSRImageView Props는 생략할 수 있습니다. 이 경우 이미지 뷰어는 클라이언트 측에서만 렌더링됩니다.
SvelteKit이 아닌 Svelte 프로젝트에서 이 컴포넌트를 사용하는 경우 $app/state 모듈을 사용할 수 없으므로, 해당 모듈 import 줄을 제거하고, 아래와 같이 cancelHref 변수 선언 부분을 수정해야 합니다.
<script>
// import { page } from '$app/state'; // SvelteKit에서만 사용
let cancelHref = "#"; // Svelte에서는 페이지 이동이 필요 없으므로 기본값으로 설정
</script>
alt 속성을 이용해 이미지 설명을 제공할 수 있습니다. 이미지 뷰어에서 하단에 해당 설명이 표시됩니다.SSRImageView Props를 통해 SSR 환경에서 사용할 이미지를 지정할 수 있습니다.page 모듈을 사용할 수 없으므로 해당 모듈 관련 코드를 제거하고, cancelHref 변수를 적절히 설정해야 합니다.SSRImageView Props를 생략하거나, 관련 코드를 제거하여 클라이언트 측에서만 이미지 뷰어가 렌더링되도록 설정할 수 있습니다.uuid 값을 제공해야 합니다. uuid 값이 없는 경우, 이미지 뷰어가 정상적으로 작동하지 않습니다.uuid 값이 dummy-1, dummy-2로 고정됩니다.