React 점진적 이미지 로드기: 흐릿함에서 선명함까지의 고해상도
14759 단어 reactwebdevtutorialjavascript
개요
좋은 사용자 환경을 통해 API에서 데이터를 로드할 때 UI 요소를 볼 수 있습니다.때로는 대형 네트워크의 유효 부하에 대해 이번에는 의미가 클 수도 있다.사용자 인터페이스 요소의 표시와 좋은 사용자 체험을 허용함으로써 사용자는 흰색 페이지를 사용하는 것처럼 낙담하지 않을 것이다.이것은 매우 큰 차이다.
대량의 고해상도 3D 이미지가 필요한 프로젝트에 종사할 때 이런 이미지 탑재 기술은 생명을 구하는 허수아비가 되었다.고해상도 이미지를 로드하는 동안 이미지의 작은 버전을 로드할 수 있습니다.그것은 큰 것이 아니라 흐릿한 그림을 표시하고 불러온 후에 초점을 맞춘다.
이것은 미디어의 이미지를 위한 것입니다. 사용자가 실시간으로 불러오는 이미지를 보고 불러오는 속도를 높일 수 있습니다.
모호한 버전과 뚜렷한 버전.
이미지 주석
압축된 작은 이미지의 확대 버전입니다.이거 500b예요.
코드
우선, 우리는 기본적인react 구성 요소를 만들 것입니다.다음과 같은 도구가 포함됩니다.
preview
: 사진 이터레이션 image
: 사진 alt
: 다음은 선택할 수 있지만 다시 사용하기 쉽습니다.
imageStyleClass
과 divStyleClass
은 Tailwind에서 온 스타일 클래스와 같은 스타일 클래스를 주입할 수 있습니다.css나 다른 스타일시트는 각각의 이미지에 대해 다른 크기를 사용합니다.bgColor
은 네트워크 부하가 오래 걸리면 사진의 공간을 차지하는 것을 확보할 수 있습니다.기본값을 투명하게 설정했습니다.imageStyleClass
: 이미지의 클래스 이름 divStyleClass
:container div bgColor
: 첫 번째 적재 시 true
으로 설정된 로드 상태와 현재 이미지 상태도 추가됩니다.currentImage
은 처음에 미리 보기에 사용됩니다.그러나 전체 크기 이미지가 로드됨에 따라 상태를 변경합니다.이미지 소스는 이미지를 로드할 때 업데이트되기 때문에 currentImage
으로 설정됩니다.div는 이미지 영역에서 넘쳐나는 필터가 모호한지 확인하는 데 사용됩니다.잠시 후
useEffect
을 사용하고 스타일링 아이템은 각자의 태그에 추가됩니다.import React, { useEffect, useState } from 'react';
const [currentImage, setCurrentImage] = useState(preview);
const [loading, setLoading] = useState(true);
const BlurryLoadingImage = ({
preview,
image,
alt,
imageStyleClass,
divStyleClass,
bgColor = 'transparent',
}) => {
return (
<div className={divStyleClass}>
<img src={currentImage} alt={alt} className={imageStyleClass} />
</div>
);
};
export default BlurryLoadingImage;
이제 마술이 어디서 일어났는지 봅시다.fetchImage
에서 큰 그림 파일을 불러올 때까지 기다립니다.완료되면 currentImage
을 새 이미지 소스로 설정합니다.fetchImage
이 image
에서 호출될 때 전체 사이즈 useEffect
원을 매개 변수로 사용합니다.const fetchImage = (src) => {
const loadingImage = new Image();
loadingImage.src = src;
loadingImage.onload = () => {
setCurrentImage(loadingImage.src);
setLoading(false);
};
};
useEffect(() => {
fetchImage(image);
}, []);
현재 스타일링이 없기 때문에, 당신은 아주 작은 이미지에서 전체 사이즈의 이미지로 변할 것이다.그림이 모호함에서 고해상도로 변할 수 있도록 그림에 다음과 같은 내용을 추가해야 합니다.이것은 초기 이미지를 흐리게 한 다음 이미지 불러오기가 끝난 후에 변환합니다.필요에 따라 이 시간과 모호한 값을 조정할 수 있습니다.둘 사이의 과도는 멋진 효과를 내고 사진이 초점을 맞추는 것처럼 더욱 뚜렷해진다.이 기간을 다시 조정하여 프로젝트에 어떤 내용이 유효한지 알 수 있습니다.
<img
style={{
filter: `${loading ? 'blur(20px)' : ''}`,
transition: '1s filter linear',
width: '100%',
background: bgColor,
}}
src={currentImage}
alt={alt}
className={imageStyleClass}
/>
너비를 100%로 설정하여 상위 컨테이너를 채우고 작은 이미지가 상위 컨테이너와 동일한 공간을 차지하도록 합니다.크기 버전 간에 통일된 이미지 크기를 유지하려면 divStyleClass
의 부모 div에 폭을 설정해야 합니다.마지막으로 권장하는 것은 divClassStyle
CSS를 overflow: hidden
으로 설정하는 것입니다. 왜냐하면 이미지의 희미한 픽셀이 넘치기 때문입니다.그렇습니다.이제 이미지를 사용해야 하는 모든 곳에서 이 이미지를 사용할 수 있습니다.그것은 높은 중용성을 가지고 있어 불러오는 시간을 줄일 수 있습니다.당신의 초기 이미지는 150k가 아니라 500b입니다. 이것은 당신의 사용자 체험을 더욱 좋아지게 할 것입니다.
최종 반응 성분
import React, { useEffect, useState } from 'react';
const BlurryLoadingImage = ({
preview,
image,
alt,
imageStyleClass,
divStyleClass,
bgColor = 'transparent',
}) => {
const [currentImage, setCurrentImage] = useState(preview);
const [loading, setLoading] = useState(true);
const fetchImage = (src) => {
const loadingImage = new Image();
loadingImage.src = src;
loadingImage.onload = () => {
setCurrentImage(loadingImage.src);
setLoading(false);
};
};
useEffect(() => {
fetchImage(image);
}, []);
return (
<div className={divStyleClass} style={{ overflow: 'hidden' }}>
<img
style={{
filter: `${loading ? 'blur(20px)' : ''}`,
transition: '1s filter linear',
width: '100%',
background: bgColor,
}}
src={currentImage}
alt={alt}
className={imageStyleClass}
/>
</div>
);
};
export default BlurryLoadingImage;
Reference
이 문제에 관하여(React 점진적 이미지 로드기: 흐릿함에서 선명함까지의 고해상도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theranbrig/react-progressive-image-loader-from-blurry-to-crisp-high-definition-56j9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)