我有一个FlatList
,它使用 scrollToIndex
函数根据时间序列自动逐项滚动。我还想让用户自己滚动列表,并在发生这种情况时暂时禁用自动滚动。
我的想法是使用 onScroll
事件来捕获用户滚动列表并设置布尔标志。问题是onScroll
事件也由scrollToIndex
触发。
有没有简单的解决方法?
您可以使用名为"onMomentumScrollEnd"的方法,该方法对于触摸交互应该是唯一的。有了它,您可以去抖动或禁用计时器。不过,您必须测试定时滚动到索引函数是否能够优先于用户交互。在这种情况下,您必须将PanResponder添加到包含视图中,并从其"onPanResponderGrant"方法中禁用/取消抖动计时器。
解决方法可以是使用标志集(例如使用 this.disableOnScrollEvent = true 的组件类)
function onScrollToIndexHandler() {
this.disableOnScrollEvent = true
// remaining code
}
function onScrollEventHandler(event){
if(this.disableOnScrollEvent){
this.disableOnScrollEvent = false;
return;
}
// remaining code
}