首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检测window.pageYOffset的自定义钩子不按预期工作。

问用于检测window.pageYOffset的自定义钩子不按预期工作。
EN

Stack Overflow用户
提问于 2022-08-10 17:07:30
回答 1查看 99关注 0票数 2

我有一个钩子,它将一个布尔值设置为如果window.pageYOffset大于100

代码语言:javascript
复制
const useScrollPosition = () => {

  const [scrollPosition, setScrollPosition] = useState(false)

  useEffect(() => {
    if (typeof window !== 'undefined') {
      window.addEventListener('scroll', () =>
        setScrollPosition(window.pageYOffset > 100)
      )
    }
  }, [])

  return [scrollPosition]
}

export default useScrollPosition

这是应用程序

代码语言:javascript
复制
          <Box
            display={displayScrollPosition ? 'none' : 'flex'}
            justifyContent="space-between"
            alignItems="center"
            border={'1px solid red'}
          >

如果布尔值为真,则容器应消失。问题在于UI。如果我滚动得够快,它就会翻转得很干净。但是如果我把屏幕滚动到100 (window.pageYOffset)左右,布尔值就会一次又一次地翻转,组件显示和隐藏的速度很快,看起来就像一个小故障。任何人都经历过类似的事情,或者能提供一个可能的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-10 22:35:01

自定义钩

代码语言:javascript
复制
import { useEffect, useState } from "react";

export const useScrollPosition = () => {
  const [scrollPos, setScrollPos] = useState(false);

  useEffect(() => {
    if (typeof window !== "undefined") {
      window.addEventListener("scroll", () => {
        if (window.pageYOffset > 100) {
          setScrollPos(true);
        }else{
          setScrollPos(false);
        }
      });
    }
  }, []);
  return { scrollPos };
};

App.js

代码语言:javascript
复制
import { useScrollPosition } from "your route custom hook";

export default function App() {
  const { scrollPos } = useScrollPosition();

  return (
   <div className="App">
      <Box
        display={scrollPos ? 'none' : 'flex'}
        justifyContent="space-between"
        alignItems="center"
        border={'1px solid red'}
      >
   </div>
  );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73310216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档