预测拖动时何时开始滚动

问题描述 投票:0回答:1

当用户单击某个元素并开始拖动时,如果他们拖动靠近视口的顶部或底部,则视图会滚动。我想在滚动开始之前做一些事情 – 当 scroll 事件触发时,已经来不及做我想做的事情了。

是否可以知道滚动即将开始?例如:

有类似
    will-scroll
  • 活动吗?
    或者一个 
  • auto-scroll-offset
  • 属性表示“如果鼠标距视口开始/结束的距离小于此距离,则开始滚动”?
    或者其他方式来猜测滚动即将开始?
javascript css browser
1个回答
0
投票

但是要在滚动开始之前做

xyz

的事情,你可以添加一些技巧,例如 -

黑客 1 -

在可拖动元素上放置一个 dragstart 事件监听器。在

dragstart
侦听器中,通过动态更新容器的溢出 css 属性,使容器不可滚动。现在,当用户继续拖动时,
drag
事件监听器将被频繁调用,在其中检查光标位置是否非常接近容器的底部/顶部。如果非常接近,则执行 xyz 操作,并通过动态更改容器的后溢出 css 属性使容器再次可滚动。这将非常快,用户不会注意到延迟。为了安全起见,您可以监听
dragend
事件并使容器在其中再次可滚动。
如果需要的话,您可以维护一个全局跟踪变量来检查用户在执行 xyz 操作后是否真的滚动,如果没有,那么您可以恢复 xyz。

OR

黑客 2 -

在主容器内维护一个虚拟的可滚动 div。在该 div 上添加一个 onscroll 监听器。现在,如果用户开始拖动并且导致滚动,则在此内部 div 上将触发

onscroll
事件,在这里您可以执行 xyz 操作并以编程方式将此 div 的 css
display
属性设置为
none
来隐藏它。这样任何进一步的拖动都将开始滚动您的实际容器。这会发生得非常快,用户不会注意到这种抽动。作为清理的一部分,您可以侦听
dragend
事件并再次将内部 div 的
display
属性设置回
block
    

© www.soinside.com 2019 - 2024. All rights reserved.