当用户单击某个元素并开始拖动时,如果他们拖动靠近视口的顶部或底部,则视图会滚动。我想在滚动开始之前做一些事情 – 当 scroll
事件触发时,已经来不及做我想做的事情了。
有类似
will-scroll
auto-scroll-offset
但是要在滚动开始之前做
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
。