函数打字稿后停止滚动事件

Sam*_*Sam 6 macos scroll typescript angular

是否可以在函数之后阻止任何进一步的滚动事件。

我想生成一个效果,您可以在其中向下滚动站点,如果您位于该站点的底部,则可以进一步滚动,但是会从左侧出现一个新站点 - 就像向左滚动一样。这个新页面带有动画,所以我不想在到达页面底部时直接触发它。

我正在设置超时,只要你到达底部:

this.timeoutUnitBottom = setTimeout(() => this.unitBottom = true, 1000);
Run Code Online (Sandbox Code Playgroud)

并且动画只会在 this.unitBottom==true 时触发。所以你滚动到底部,然后在 1 秒后你可以再次滚动,下一个站点将从左侧出现。

我的问题:如果你在 mac 上像我一样滚动,即使你不触摸触摸板,你的滚动事件也会继续。这通常会在休闲页面上生成平滑滚动,但在这里可能是您滚动到底部,setTimeout 触发并且您的滚动事件在那一秒后仍会触发。

所以:在你抬起你的手指(甚至在任何其他计算机上,我不知道这些机制)后,是否有可能在 mac 上停止正在进行的滚动事件

这可能是一个无法解决的问题,因为通常你不能改变计算机的输入,但也许你们中的一些人会有一些想法。

真诚的,山姆

编辑

我认为所有回答我问题的人都没有明白我确实需要滚动事件并且不能简单地禁用它。唯一有帮助的是我的问题下的评论。

小智 0

您无法禁用滚动事件。但是,您可以禁用导致滚动的操作。在我看来,我建议使用以下解决方案,而不是像这里提到的那样使用多个事件侦听器:用户滚动但您操纵事件以保持在同一位置,并且当您想要重新启用滚动时,您覆盖 window.onscroll具有空白功能

disableScroll() { 
    // Get the current page scroll position 
    scrollTop = window.pageYOffset || document.documentElement.scrollTop; 
    scrollLeft = window.pageXOffset || document.documentElement.scrollLeft, 
  
        // if any scroll is attempted, set this to the previous value 
        window.onscroll = function() { 
            window.scrollTo(scrollLeft, scrollTop); 
        }; 
} 
  
enableScroll() { 
    window.onscroll = function() {}; 
} 
Run Code Online (Sandbox Code Playgroud)