javascript - 检测页面上的滚动方向 - 更新先前的值

标签 javascript reactjs scroll ecmascript-6

我正在使用 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 放在间隔内以更新值或类似疯狂的东西?

最佳答案

尝试以下操作。它应该可以工作,因为以前的值以这种方式存储在组件的实例中。

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;
};

关于javascript - 检测页面上的滚动方向 - 更新先前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50412259/

相关文章:

javascript - 在 JavaScript 中反转整数

javascript - 如何在 Web 应用程序的单独文件中回调 Google Maps init

javascript - React 如何知道组件已从 DOM 中移除?

javascript - JS - 停止 DIV 并在位置添加类

javascript - 请任何人为Web中的表结构提供帮助

javascript - 返回单的区别?

javascript - 当子组件嵌套多个父组件时,从子组件调用 super 父函数

reactjs - 在 package.json 中使用 "homepage",而不弄乱 localhost 的路径

c# - OpenTK 文字动画

javascript - Javascript 中滚动事件的结束