javascript - 使用 Javascript 和 React 检测 DIV 中的滚动位置

标签 javascript html css reactjs

this.state = {
    page: 1
}

onScroll = () =>{
    let elem = document.getElementById("longTable");
    let loading = true // this can change depening on if an api call is in progress
    if ((elem.offsetHeight + elem.scrollTop) >= elem.offsetHeight - 10 &&!loading ) {
     this.setState(prevState => ({ page: prevState.page + 1 }), () =>
     console.log("Now You can Scroll")
    //    this.props.onLoadMore(this.state.page)
    )
    }else{
    //   debugger;
     console.log("finally--- no more api calls")
    }
    }
<div
  className={"long-table"}
  id={"longTable"}
  onScroll={this.onScroll}
  style={{ width: "-webkit-fill-available" }}
> 
</div>;
.long-table {
  overflow-y: auto;
  height: 600px;
 }

这就是我所做的,但即使我向上或向下滚动,它也会继续调用 api..

我如何检测该 div 中的滚动,以便向上滚动不会进行 api 调用,但向下滚动只会进行 api 调用 当达到一定的高度时,我不能一直低头并一直在进行 api 调用..

请帮忙

最佳答案

似乎 DOM 没有提供一种内置的方式来区分向下滚动和向上滚动事件。

所以,唯一的办法就是存储之前的滚动位置,然后将它与新的滚动位置进行比较,就可以知道是向上滚动还是向下滚动。

此外,在 React 中,最好的方法应该是将这样的值直接存储为属性:

class MyComponent extends Component {
  constructor(props) {
    super(props)
    this.lastScrollTopPosition = 0
  }

  onScroll() {
    /* ... */
  }
}

可以引用this查看如何比较之前和当前的滚动位置。

关于javascript - 使用 Javascript 和 React 检测 DIV 中的滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59320613/

相关文章:

javascript - 如何在 vue js html 中根据时间显示 "Closed"或 "Open"?

javascript - 如何在正则表达式中选择所有不以两个 ".."(点)开头的 href

javascript - 包括来自 raw.github.com 的 js

html - 在透明背景下悬停时更改按钮的背景

html - 更改悬停状态图标的颜色

css - 我可以使用 modernizr 有条件地加载背景 css 图像吗?

带小数的负数的 Javascript 正则表达式

javascript - 我的 JavaScript 代码结果在闪烁

php - DD_belatedPNG 和 DD_roundies 与 Opera 中的 Cufon 有冲突

javascript - 悬停时切换下拉菜单的脚本不适用于新的下拉菜单