تشخیص اسکرول کاربر به انتهای div با React

mohsen1 ماه قبل1 ماه قبل
ارسال شده در
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 کامپوننت حتمن لیسنتر را حذف کنید تا از مشکلات بعدی مانند نشت حافظه جلوگیری شود.

رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!