تشخیص اسکرول کاربر به انتهای div با React
برای تشخیص زمان رسیدن کاربر به انتهای یک div، میتوانید از ویژگیهای scrollHeight
، scrollTop
و clientHeight
در JavaScript استفاده کنید. این خصوصیات به شما اجازه میدهند تا مقدار ارتفاع اسکرول شده را با مقادیر دیگر مقایسه کنید.
برای پیادهسازی در React، میتوانید به شکل زیر عمل کنید:
1 . استفاده از useRef : با استفاده از useRef
در React میتوانید به div دلخواه خود ارجاع دهید و از این ارجاع برای دریافت ابعاد آن استفاده کنید.
const divRef = useRef();
<div ref={divRef}>...</div>
2 . تعریف یک تابع برای تشخیص پایین: تابعی برای بررسی اینکه آیا کاربر به پایین div رسیدهاست، ایجاد کنید. این تابع میتواند به صورت زیر باشد:
const isBottom = (el) => {
return el.scrollHeight - el.scrollTop === el.clientHeight;
};
3 . اضافه کردن listener برای رویداد اسکرول: با اضافه کردن onScroll
به div و بررسی وضعیت میزان اسکرول آن، میتوانید تشخیص دهید که کاربر به انتهای div رسیده است یا خیر.
به عنوان یک نمونه، کد زیر را در نظر بگیرید:
import React, { useRef, useEffect } from "react";
const ScrollableDiv = () => {
const divRef = useRef();
const onScroll = () => {
if (divRef.current) {
const { scrollTop, scrollHeight, clientHeight } = divRef.current;
if (scrollHeight - scrollTop === clientHeight) {
console.log("به پایین div رسیدن");
// انجام اقدام مورد نظر
}
}
};
useEffect(() => {
const divElement = divRef.current;
if (divElement) {
divElement.addEventListener("scroll", onScroll);
return () => {
divElement.removeEventListener("scroll", onScroll);
};
}
}, []);
return (
<div
ref={divRef}
style={{ height: "200px", overflowY: "scroll" }} // تنظیمات برای ایجاد اسکرول
>
{/* محتوای طولانی برای اسکرول */}
</div>
);
};
export default ScrollableDiv;
با این روش شما میتوانید به سادگی تشخیص دهید که آیا کاربر به پایین div رسیده است یا خیر. همچنین توجه داشته باشید که در زمان unmount کامپوننت حتمن لیسنتر را حذف کنید تا از مشکلات بعدی مانند نشت حافظه جلوگیری شود.