我想在我的网站上添加无限滚动功能,但当我滚动页面时,Scroll EventListener没有触发的问题.

useEffect(() => {
    window.addEventListener("scroll", handleInfiniteScrolling);
    console.log("Hello");
    return () => {
      window.removeEventListener("scroll", handleInfiniteScrolling);
    };
  }, []);
const handleInfiniteScrolling = async () => {
    try {
      console.log("Scroll Height", document.documentElement.scrollHeight);
      console.log("Inner Height", window.innerHeight);
      console.log("scrollTop", document.documentElement.scrollTop);
    } catch (err) {
      console.log(err);
    }
  };
return (
    <>
      <div
        className="results-page"
        style={{
          height: "100vh",
          overflow: 'scroll',
        }}
      >
        {data.map((item) => (
          <MainLayer props={item} key={item._id} />
        ))}
      </div>
    </>
  );

推荐答案

div是滚动容器,div内的内容被滚动.您需要使用onScroll事件将事件侦听器添加到div:

const data = Array.from({ length: 100 }, () => ({ _id: crypto.randomUUID() }));

const Demo = () => {  
  const handleInfiniteScrolling = e => {
    console.log(e.target.scrollTop)      
  };

  return (
    <div
      onScroll={handleInfiniteScrolling}
      className="results-page"
      style={{
        height: "100vh",
        overflow: 'scroll',
      }}
    >
      {data.map(item => (
        <div key={item._id}>{item._id}</div>
      ))}
    </div>
  );
};

ReactDOM
  .createRoot(root)
  .render(<Demo />);
html, body {
  margin: 0;
}
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>

<div id="root"></div>

Javascript相关问答推荐

为什么新的Promises会在不需要的情况下被用来等待?

TestCafe预计文本等于以下内容之一

Python类实现的JavaScript吊坠是什么样子的?

使用NgDeliverentOutlet和动态内容投影的Angular 渲染组件

我的YouTube视频没有以html形式显示,以获取免费加密信号

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

是什么原因导致此Angular 16电影应用程序中因类型错误而不存在属性?

如何在Connect 4游戏中 for each 玩家使用位板寻找7形状?

为什么这个JS模块在TypeScript中使用默认属性导入?""

当点击注册页面上的注册按钮时,邮箱重复

从Node JS将对象数组中的数据插入Postgres表

构造HTML表单以使用表单数据创建对象数组

在forEach循环中获取目标而不是父对象的属性

JQuery Click事件不适用于动态创建的按钮

如何创建返回不带`new`关键字的实例的类

在数组中查找重叠对象并仅返回那些重叠对象

如何在 Select 文本时停止Click事件?

在SHINY R中的嵌套模块中,不能使用Java代码

未捕获的运行时错误:调度程序为空

有没有一种直接的方法可以深度嵌套在一个JavaScript对象中?