【问题标题】:ReactJS - Change navbar color on scrollReactJS - 在滚动时更改导航栏颜色
【发布时间】:2021-06-07 17:14:06
【问题描述】:

我有以下代码:

import React, {useState} from 'React';
import Header from './styles.js';

const HeaderComponent = props => 
{
  const [navBg, setNavBg] = useState(false);
  const isHome = props.name === 'Homepage' ? true : false;

  const changeNavBg = () =>
  {
   window.scrollY >= 800 ? setNavBg(true) : setNavBg(false);
  }

  window.addEventListener('scroll', changeNavBg);

  return (
  <Header {...(isHome && navBg ? { backgroundColor: '#00008' : {})} />
  )
}

我想要实现的是,当滚动超过 800 像素时,我希望我的 Header 改变颜色。

为你的时间干杯。

【问题讨论】:

    标签: javascript reactjs scroll navbar


    【解决方案1】:

    您可以尝试以下几种方法

    1。使用 React onScroll UI 事件
     return (
       <div onScroll={changeNavBg}>
         <Header {...(isHome && navBg ? { backgroundColor: '#00008' : {})} />
       </div>
     )
    
    2。考虑将监听器绑定到useEffect
    import React, {useState} from 'React';
    import Header from './styles.js';
    
    const HeaderComponent = props => {
      const [navBg, setNavBg] = useState(false);
      const isHome = props.name === 'Homepage' ? true : false;
    
      const changeNavBg = () => {
       window.scrollY >= 800 ? setNavBg(true) : setNavBg(false);
      }
    
      useEffect(() => {
        window.addEventListener('scroll', changeNavBg);
        return () => {
          window.removeEventListener('scroll', changeNavBg);
        }
      }, [])
    
      return (
      <Header {...(isHome && navBg ? { backgroundColor: '#00008' : {})} />
      )
    }
    

    【讨论】:

    • 实际上我已经设法通过在我的styles.js 中将navBg 作为道具传递并在那里检查它是否设置为true 和isHome 来修复它。尽管如此,我仍会将您的答案标记为正确的,因为您应该为此付出努力。谢谢。
    • 酷。谢谢。无论如何,这是一个工作示例stackblitz.com/edit/react-jddnch?file=src/App.js
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2017-02-03
    • 2021-05-06
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多