我想创建一个自动滚动的轮播,直到用户滚动/触摸ScrollView本身。
使用scrollView.scrollTo
自动滚动本身可以正常工作但是如何检测用户是否与ScrollView交互?我查看了onScroll
事件,但在用户生成的事件和通过调用scrollTo
生成的事件之间似乎没有区别。
此外,我想知道是否可以直接从ScrollView获取当前滚动位置,而不是每次从onScroll
事件中读取它。
我非常感谢任何提示和建议。
答案 0 :(得分:4)
通过挖掘ScrollView
's source code,你可以注意到一些无证的回调,可以帮助你实现你所追求的目标,即onTouchStart
和onTouchEnd
。这两个回调仅在用户与ScrollView
交互时触发,而不是在以编程方式滚动时触发。
您可能希望在onTouchStart
上清除自动滚动间隔,并在onTouchEnd
延迟后重新启动。
关于你的下一个问题,答案是否定的。据我所知,目前没有任何getter可以检索当前的滚动位置。因此,您需要依赖传递给onScroll
的事件,检索event.nativeEvent.contentOffset['x' or 'y']
,并将其存储在组件的状态中。
请注意,如果你正在做一些需要密切关注滚动位置的重型动画(例如动画标题或视差图像),那么对Animated.event
使用本机驱动程序是个好主意。您可以在React Native's blog上了解有关它的更多信息。