2017-08-07 49 views
0

我想创建一个轮播自动滚动,直到用户滚动/触摸ScrollView本身。React Native:ScrollView with auto scroll

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

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

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

回答

2

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

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

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

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

+0

非常感谢您的帮助:-) –