import { useState, useEffect } from "react"; import { motion as m, AnimatePresence } from "framer-motion"; const ScrollTracker = () => { const [scrollPercentage, setScrollPercentage] = useState(0); const [scrolling, setScrolling] = useState(false); // console.log(id); function handleUnload() { const currentChapter = localStorage.getItem("currentChapterId"); const scrollData = JSON.parse(localStorage.getItem("watchedManga")) || []; const scroll = localStorage.getItem("scrollPercentage"); if (scroll < 5) { return; } const existingDataIndex = scrollData.findIndex( (data) => data.id === currentChapter ); if (existingDataIndex !== -1) { // Update existing data scrollData[existingDataIndex].timestamp = Date.now(); scrollData[existingDataIndex].percentage = parseFloat( localStorage.getItem("scrollPercentage") ); } else { // Add new data scrollData.push({ timestamp: Date.now(), percentage: parseFloat(localStorage.getItem("scrollPercentage")), id: currentChapter, }); } localStorage.setItem("watchedManga", JSON.stringify(scrollData)); } function handlePageHide() { localStorage.setItem("scrollPercentage", scrollPercentage); handleUnload; } // console.log(data?.id); useEffect(() => { function handleScroll() { const scrollTop = document.documentElement.scrollTop; const scrollHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight; const percentage = (scrollTop / scrollHeight) * 100; setScrollPercentage(percentage); localStorage.setItem("scrollPercentage", percentage); } function handlePageshow() { const currentChapter = localStorage.getItem("currentChapterId"); const lastScrollPercentage = JSON.parse(localStorage.getItem("watchedManga")) ?.filter((data) => data.id === currentChapter) .map((data) => data.percentage) || 0; if (lastScrollPercentage >= 95) { return; } const scrollTop = (lastScrollPercentage / 100) * (document.documentElement.scrollHeight - document.documentElement.clientHeight); document.documentElement.scrollTop = scrollTop; } window.addEventListener("scroll", handleScroll); window.addEventListener("pageshow", handlePageshow); window.addEventListener("beforeunload", handleUnload); window.addEventListener("pagehide", handlePageHide); return () => { window.removeEventListener("scroll", handleScroll); window.removeEventListener("pageshow", handlePageshow); window.removeEventListener("beforeunload", handleUnload); window.removeEventListener("pagehide", handlePageHide); }; }, []); useEffect(() => { if (scrollPercentage > 5) { setScrolling(true); } else { setScrolling(false); } }, [scrollPercentage]); function handleScrollTop(e) { e.preventDefault(); window.scrollTo({ top: 0, behavior: "smooth", }); } // console.log(scrollPercentage); return ( <> {scrolling && ( )}
); }; export default ScrollTracker;