Lazy load fixes

This commit is contained in:
2024-03-26 11:47:04 +05:00
parent 62149071ec
commit 996765de31
3 changed files with 12 additions and 36 deletions
+5 -25
View File
@@ -98,32 +98,12 @@ export default function App() {
const [setModal] = useModalStore((state) => [state.setModal]);
const [isShownAllProjects, setIsShownAllProjects] = useState<boolean>(false);
const [isBuffering, setIsBuffering] = useState(true);
const [viewPortEntered, setViewPortEntered] = useState(false);
const featureRefDesktop = useRef<HTMLDivElement>(null);
const featureRefMobile = useRef<HTMLDivElement>(null);
const [isViewportEntered, setIsViewportEntered] = useState(false);
const handleOnViewportFeatureEnter = () => {
if (viewPortEntered) return;
if (isViewportEntered) return;
setViewPortEntered(true);
if (!featureRefDesktop.current || !featureRefMobile.current) return;
const videoDesktopRefs = featureRefDesktop.current.children;
const videoMobileRefs = featureRefMobile.current.children;
if (!videoDesktopRefs || !videoMobileRefs) return;
for (let i = 0; i < videoDesktopRefs.length; i++) {
const videoMobileEl = videoDesktopRefs[i] as HTMLVideoElement;
const videoDesktopEl = videoMobileRefs[i] as HTMLVideoElement;
if (videoMobileEl.dataset.src && videoDesktopEl.dataset.src) {
videoDesktopEl.src = videoDesktopEl.dataset.src;
videoMobileEl.src = videoMobileEl.dataset.src;
}
}
setViewPortEntered(true);
setIsViewportEntered(true);
};
async function getProjects() {
@@ -452,12 +432,12 @@ export default function App() {
</div>
</div>
<FeatureVideoViewBox
isViewportEntered={isViewportEntered}
selectedVideo={selectedVideo}
videos={VIDEOS}
featureRef={featureRefDesktop}
/>
<VideoSliderMobile featureRef={featureRefMobile} />
<VideoSliderMobile isViewportEntered={isViewportEntered} />
</motion.div>
<Histories />
+4 -7
View File
@@ -3,13 +3,13 @@ import { useEffect, useRef } from "react";
interface FeatureVideoViewBoxProps {
selectedVideo: string;
videos: string[];
featureRef: React.LegacyRef<HTMLDivElement>;
isViewportEntered: boolean;
}
function FeatureVideoViewBox({
selectedVideo,
videos,
featureRef,
isViewportEntered,
}: FeatureVideoViewBoxProps) {
// const videoRef = useRef<HTMLVideoElement>(null);
const videoContainerRef = useRef<HTMLDivElement>(null);
@@ -36,15 +36,12 @@ function FeatureVideoViewBox({
// }
// }, [selectedVideo]);
useEffect(() => {
return () => {};
}, [selectedVideo]);
return (
<div className="aspect-video sticky top-[25%] xl:block hidden">
<div ref={featureRef} className="relative h-fit">
<div className="relative h-fit">
{videos.map((video) => (
<video
src={isViewportEntered ? video : ""}
data-src={video}
key={video}
muted
+3 -4
View File
@@ -7,10 +7,10 @@ import ArrowRightIcon from "./icons/ArrowRightIcon";
import { useSwipeable } from "react-swipeable";
interface IVideoSliderMobile {
featureRef: React.LegacyRef<HTMLDivElement>;
isViewportEntered: boolean;
}
function VideoSliderMobile({ featureRef }: IVideoSliderMobile) {
function VideoSliderMobile({ isViewportEntered }: IVideoSliderMobile) {
const [items] = useState<any[]>([
{
title: "Виртуальный тур по жилому комплексу",
@@ -106,7 +106,6 @@ function VideoSliderMobile({ featureRef }: IVideoSliderMobile) {
className="xl:hidden flex flex-col sm:gap-6 gap-4 border-b border-[#3D425C] pb-5"
>
<div
ref={featureRef}
className={`relative flex sm:gap-[88px] items-start transition-all duration-500`}
style={{ left: `-${activeIndex * 100}%` }}
>
@@ -114,7 +113,7 @@ function VideoSliderMobile({ featureRef }: IVideoSliderMobile) {
<motion.video
key={index}
ref={videoRefs[index]}
data-src={item.video}
src={isViewportEntered ? item.video : ""}
muted
loop
playsInline