React-Native ListView:动态设置contentOffset,效果延迟

时间:2016-01-26 10:44:53

标签: listview react-native

在屏幕上,我有两个ListViews,leftListView和rightListView,当我滑动rightListView时设置leftListView的contentOffset,以保持contentOffset在同一级别。但是leftListView的效果非常延迟!

您可以运行我的演示来体验效果

github上:github link

 onScroll(){
    if (this.state.loaded) {
      var rightList = this.refs[RIGHT_LISTVIEW];
      var leftList = this.refs[LEFT_LISTVIEW];
      var y1 = leftList.scrollProperties.offset;
      rightList.setNativeProps({
        contentOffset : {x: 0, y: y1}
      });
    }
  },

1 个答案:

答案 0 :(得分:1)

根据您的存储库的快速浏览,看起来您的应用程序仅适用于iOS。如果是这种情况,您可能想尝试调整最左侧ListView的scrollEventThrottle道具。

ScrollView文档说明onScroll

  

onScroll功能

     

滚动期间每帧最多触发一次。可以使用scrollEventThrottle prop

控制事件的频率

这是scrollEventThrottle

  

scrollEventThrottle数字

     

它控制滚动时滚动事件的频率(以每秒事件数为单位)。数字越大,跟踪滚动位置的代码的准确度越高,但由于通过网桥发送的信息量,可能导致滚动性能问题。默认值为零,这意味着滚动事件将在每次滚动视图时仅发送一次。

ScrollView属性可以直接传递给ListView,继承自ScrollView

尝试的好数字可能是scrollEventThrottle={16},大约是60fps。这可能会或可能不会产生您想要的效果。

您可能尝试的另一个优化方法是使用Animated.event将最右边的ListView contentOffset.y的值绑定到最左边的{Content}的valueOffset值,也许可以卸载一些重的提升到本机执行端,而不是在JavaScript和本机代码之间来回编组事件。但实施起来可能有点复杂,但请查看Animated文档,了解如何开始使用。