프로젝트/오심테(오늘의 심리테스트)
[NextJS] 이미지 로딩 애니메이션 구현하기
bbeyak
2023. 6. 3. 23:12
반응형
NextJS는 SSR을 제공하기 때문에 Image 컴포넌트를 사용하면 로딩이 조금 느리게 된다는 것을 체감할 수 있다. 사용자 입장에서는 클릭했는데 아무 변화가 없으니 다시 클릭해야 하나 어쩌나 헷갈릴 수도 있다.
그래서 간단하게 이미지 로딩 애니메이션을 구현해보기로 했다.
먼저, global.css 파일에 해당 코드를 추가해준다.
.animation {
width: 42px;
height: 42px;
position: absolute;
left: 50%;
top: 50%;
transform-origin: 50%;
margin-left: -21px;
margin-top: -21px;
border-radius: 50%;
border: 4px solid plum;
border-top-color: transparent;
border-left-color: transparent;
animation: Rotate 0.8s infinite linear;
z-index: 100;
}
@keyframes Rotate {
from {transform: rotate(0deg)}
to {transform: rotate(360deg)}
}
그런 다음 이미지 컴포넌트로 인해 로딩이 느려지는 컴포넌트를 찾아 다음과 같이 수정해준다.
import { useRef } from "react";
export default function TestDetails({ test }) {
const ref = useRef(null);
return (
<Layout handleReset={setReset}>
<div className="flex flex-col items-center justify-center sm:mt-2 md:mt-4">
<div className="mb-6 relative">
<Image
src={test.image}
alt={test.title}
width={700}
height={400}
style={{ width: 700, height: 400 }}
className="object-cover"
priority={true}
onLoadingComplete={() => ref.current.remove()}
/>
<div className="animation" ref={ref} />
</div>
...
그러면 다음과 같이 새로운 테스트를 클릭하여 이미지가 로딩될 때, 다음과 같이 로딩 애니메이션을 볼 수 있다. 당연히 페이지 로딩 속도도 빨라진다.
참고한 블로그)
[Next.js] 이미지 로딩 애니메이션 구현하기
이미지를 리스트 형식으로 나열 할때, next.js 의 Image 컴포넌트를 사용하면 이미지를 캐싱 하게됩니다. 문제는 로드와 캐싱되는 시간 동안 사용자는 이미지 대신 비어 있는 공간을 보게됩니다. 해
gurtn.tistory.com
반응형