检测页面上的滚动方向 - 更新上一个值

Posted

技术标签:

【中文标题】检测页面上的滚动方向 - 更新上一个值【英文标题】:Detecting scrolling direction on the page - updating prev value 【发布时间】:2018-05-18 13:19:24 【问题描述】:

我正在使用 React,我需要获取滚动方向才能做一些事情。我有一个工作代码,但我对如何存储和更新以前的滚动位置一无所知。

这是我的代码:

componentDidMount()
    const prev = window.scrollY;
    window.addEventListener('scroll', e => this.handleNavigation(e, prev);

这里的可见问题是 componentDidMount 只触发一次所以当我尝试执行以下操作时:

handleNavigation = (e, prev) =>
    const window = e.currentTarget;

    if(prev > window.scrollY)
        console.log("scrolling up");
    
    else if(prev < window.scrollY)
        console.log("scrolling down");
    
;

它可以正确比较值,但 prev 永远不会改变,因此它不能按预期工作。我如何使它工作?

我是否将 prev 放在间隔内以更新值或类似的疯狂内容?

【问题讨论】:

【参考方案1】:

试试下面的。它应该可以工作,因为以前的值存储在组件的实例中。

componentDidMount() 
    this.prev = window.scrollY;
    window.addEventListener('scroll', e => this.handleNavigation(e));


handleNavigation = (e) => 
    const window = e.currentTarget;

    if (this.prev > window.scrollY) 
        console.log("scrolling up");
     else if (this.prev < window.scrollY) 
        console.log("scrolling down");
    
    this.prev = window.scrollY;
;

【讨论】:

是的,这是有效且明显的解决方案。感谢您解开我的大脑。 对于那些正在寻找更精确的 react hooks 实现的人,可以在这个post 中找到它。 你可以在这里找到没有任何状态管理的答案:***.com/a/65534697/7207514

以上是关于检测页面上的滚动方向 - 更新上一个值的主要内容,如果未能解决你的问题,请参考以下文章

使用滚动视图和页面控制?

UICollectionView 检测滚动方向和更改图像

如何在不实际滚动的情况下确定滚动方向

在浏览器中滚动距离当前位置后检测滚动

检测适配器中的滚动方向(上/下)

如何检测scrollView的滚动方向?