React Native:带自动滚动的ScrollView

时间:2017-08-07 10:45:37

标签: react-native

我想创建一个自动滚动的轮播,直到用户滚动/触摸ScrollView本身。

使用scrollView.scrollTo自动滚动本身可以正常工作但是如何检测用户是否与ScrollView交互?我查看了onScroll事件,但在用户生成的事件和通过调用scrollTo生成的事件之间似乎没有区别。

此外,我想知道是否可以直接从ScrollView获取当前滚动位置,而不是每次从onScroll事件中读取它。

我非常感谢任何提示和建议。

1 个答案:

答案 0 :(得分:4)

通过挖掘ScrollView's source code,你可以注意到一些无证的回调,可以帮助你实现你所追求的目标,即onTouchStartonTouchEnd。这两个回调仅在用户与ScrollView交互时触发,而不是在以编程方式滚动时触发。

您可能希望在onTouchStart上清除自动滚动间隔,并在onTouchEnd延迟后重新启动。

关于你的下一个问题,答案是否定的。据我所知,目前没有任何getter可以检索当前的滚动位置。因此,您需要依赖传递给onScroll的事件,检索event.nativeEvent.contentOffset['x' or 'y'],并将其存储在组件的状态中。

请注意,如果你正在做一些需要密切关注滚动位置的重型动画(例如动画标题或视差图像),那么对Animated.event使用本机驱动程序是个好主意。您可以在React Native's blog上了解有关它的更多信息。