水平scrollview捕捉反应原生

Sri*_*uni 21 horizontalscrollview ios react-native react-native-scrollview

嗨,我正在努力实现scrollview像下面的gif链接中心

检查这个Gif

但无法这样做.以下是我的反应本机代码来实现这一点.

或者有没有任何方法可以滚动到像android这样的scrollview元素的特定索引?

任何帮助,将不胜感激.提前致谢

<ScrollView
  style={[styles.imgContainer,{backgroundColor:colorBg,paddingLeft:20}]}
  automaticallyAdjustInsets={false}
  horizontal={true}
  pagingEnabled={true}
  scrollEnabled={true}
  decelerationRate={0}
  snapToAlignment='center'
  snapToInterval={DEVICE_WIDTH-100}
  scrollEventThrottle={16}
  onScroll={(event) => {
    var contentOffsetX=event.nativeEvent.contentOffset.x;
    var contentOffsetY=event.nativeEvent.contentOffset.y;

    var  cellWidth = (DEVICE_WIDTH-100).toFixed(2);
    var cellHeight=(DEVICE_HEIGHT-200).toFixed(2);

    var  cellIndex = Math.floor(contentOffsetX/ cellWidth);

    // Round to the next cell if the scrolling will stop over halfway to the next cell.
    if ((contentOffsetX- (Math.floor(contentOffsetX / cellWidth) * cellWidth)) > cellWidth) {
      cellIndex++;
    }

    // Adjust stopping point to exact beginning of cell.
    contentOffsetX = cellIndex * cellWidth;
    contentOffsetY= cellIndex * cellHeight;

    event.nativeEvent.contentOffsetX=contentOffsetX;
    event.nativeEvent.contentOffsetY=contentOffsetY;

    // this.setState({contentOffsetX:contentOffsetX,contentOffsetY:contentOffsetY});
    console.log('cellIndex:'+cellIndex);

    console.log("contentOffsetX:"+contentOffsetX);
      // contentOffset={{x:this.state.contentOffsetX,y:0}}
  }}
>
  {rows}

</ScrollView>
Run Code Online (Sandbox Code Playgroud)

Vas*_*hev 42

您不需要使用ScrollView可以执行其他库.您只需在组件中添加以下道具即可.

    horizontal= {true}
    decelerationRate={0}
    snapToInterval={200} //your element width
    snapToAlignment={"center"}
Run Code Online (Sandbox Code Playgroud)

查看这个零食,了解如何实施它的更多细节 https://snack.expo.io/H1CnjIeDb

  • @William 我认为 FlatList 通常比 ListView 更受欢迎? (2认同)

pha*_*ann 8

使用中的pagingEnabled属性ScrollView

const screenHeight = Dimensions.get('window').height;

class Screen extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <ScrollView pagingEnabled>
        <Page1 style={{height: screenHeight}} />
        <Page2 style={{height: screenHeight}} />
      </ScrollView>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)