检测用户在Reaction中滚动到div内部的时间

zpgglvta  于 2022-09-21  发布在  React
关注(0)|答案(1)|浏览(119)

如何使用Reaction实现“滚动检测”功能?我想向用户显示一个带有给定消息的div,并仅在用户滚动该复选框后启用该复选框。这是我目前的实现,但不起作用。

function Disclaimer({ text, checkboxText }) {
  const divRef = useRef();
  const [userHasReviewed, setUserHasReviewed] = useState(false);

  const scrollTracker = () => {
    if (divRef.current) {
      const { scrollTop, scrollHeight, clientHeight } =
        divRef.current;
      if (scrollTop + clientHeight === scrollHeight) {
        setUserHasReviewed(true);
      }
    }
  };

  return (
    <div>
      <div
        ref={divRef}
        onScroll={() => scrollTracker()}
      >
        {text}
      </div>
      <div>
        <Checkbox
          label={checkboxText}
          disabled={!userHasReviewed}
        />
      </div>
    </div>
  );
}

我在scrollTracker函数中放置了调试点,但调试器从未进入该函数。我认为这是因为文本不够大,不足以实际溢出,需要滚动空间/操作。在这种情况下,我如何自动检测这一点,以便将userHasReviewed自动设置为true

eh57zj3b

eh57zj3b1#

如果元素不可滚动,则onScroll方法不会激发。默认情况下,元素是不可滚动的,您必须为该div设置css属性overflow:scroll

但是,如果这不是您要找的,那么您需要的是交集观察者API。阅读MDN文档here.,它可以观察元素和顶级文档的视区之间的交集。您可以点击该信息并显示该复选框。

相关问题