پرسش

بروزرسانی استایل یک کامپوننت هنگام اسکرول در React.js

Update style of a component onScroll in React.js

من یه کامپوننت دارم توی React که می‌خوام وقتی کاربر صفحه رو اسکرول می‌کنه، استایلش تغییر کنه. به عبارتی دیگه، وقتی کاربر به یه نقطه مشخص توی صفحه رسید، مثلا رنگ پس‌زمینه یا هر ویژگی دیگه‌ای از کامپوننت عوض بشه. چطور می‌تونم این کارو انجام بدم؟

1403/06/02
پاسخ
محمدامین سعیدی راد
بیوگرافی محمدامین سعیدی راد

برای تغییر استایل یک کامپوننت هنگام اسکرول، بهترین روش اینه که از رویداد scroll استفاده کنی و بر اساس موقعیت اسکرول، استایل کامپوننت رو به‌روزرسانی کنی. در اینجا یه راهکار ساده و موثر رو با هم بررسی می‌کنیم:

  1. ابتدا یه state برای نگهداری وضعیت اسکرول ایجاد کن. این state به‌روزرسانی می‌شه و بر اساس اون می‌تونیم استایل کامپوننت رو تغییر بدیم.
  2. از useEffect استفاده کن تا هر زمانی که صفحه اسکرول شد، تابعی رو اجرا کنه که موقعیت اسکرول رو بررسی کنه.
  3. بر اساس موقعیت اسکرول (مثلاً اگه از یه حدی بیشتر شد)، state رو تغییر بده و اون رو به استایل کامپوننتت اعمال کن.

یه مثال ساده از این روش رو می‌تونی اینجا ببینی:

import React, { useState, useEffect } from 'react';
const ScrollComponent = () => {
  // Define a state to store scroll position
  const [isScrolled, setIsScrolled] = useState(false);
  useEffect(() => {
   const handleScroll = () => {
   const scrollPosition = window.scrollY;
// Check if the scroll position is greater than a threshold
   if (scrollPosition > 100) {
   setIsScrolled(true);
   } else {
   setIsScrolled(false);
   }
};
   // Add the scroll event listener
   window.addEventListener('scroll', handleScroll);
   // Cleanup the event listener on component unmount
  return () => {
   window.removeEventListener('scroll', handleScroll);
   };
  }, []);
  return (
   <div style={{
    backgroundColor: isScrolled ? 'blue' : 'transparent',
    transition: 'background-color 0.3s ease'
   }}>
     <h1>Scroll to Change Background</h1>
   </div>
);
};
export default ScrollComponent;

توضیحات:

  • در این مثال، ما از window.scrollY برای به دست آوردن موقعیت اسکرول استفاده کردیم. اگر این مقدار از 100 بیشتر شد، رنگ پس‌زمینه کامپوننت به آبی تغییر می‌کنه.
  • از useEffect برای اضافه کردن و پاک کردن event listener مربوط به اسکرول استفاده کردیم.
  • در نهایت، استایل کامپوننت بر اساس وضعیت state که نشان‌دهنده اسکرول هست، تغییر می‌کنه.

این روش نه تنها ساده است بلکه به خوبی با React همخوانی داره و می‌تونه در پروژه‌های مختلف به‌راحتی استفاده بشه. امیدوارم این توضیحات بهت کمک کرده باشه!

پاسخ: 1403/06/02
آخرین آپدیت: 1403/07/28