0

各アイテムがwidth:300 である水平フラットリストがあります。表示しようとしているアイテムのインデックスを取得するだけです。RNフラットリストで現在表示されているインデックスを取得する方法

handleScroll(event) { 
    let index = Math.ceil(
     event.nativeEvent.contentOffset.x/300 
    ); 

そして、このような何か:この試しました

<FlatList 
      onScroll={(e) => this.handleScroll(e)} 
      horizontal={true} 
      data={this.state.data} 
      renderItem... 

handleScroll(event) { 
    let contentOffset = event.nativeEvent.contentOffset; 
    let index = Math.floor(contentOffset.x/300); 

を何も、私はいつも一つの指標アップまたは1つのインデックスを降り正確ではありません。
私は間違って何をやっていますか、フラットリストで正しい現在のインデックスを取得する方法はありますか?

たとえば私は、リスト内の8番目である項目をリストしてもらうが、私はあなたが欲しいものを得るためにFlatList onViewableItemsChanged小道具を使用することができ、インデックス9または10
enter image description here

答えて

6

を取得します。

<FlatList 
    onViewableItemsChanged={({ viewableItems, changed }) => { 
    console.log("Visible items are", viewableItems); 
    console.log("Changed in this iteration", changed); 
    }} 
    viewabilityConfig={{ 
    itemVisiblePercentThreshold: 50 
    }} 
/> 

viewabilityConfigあなたは視認性の設定で好きな作るためにあなたを助けることができます。コード例50では、アイテムが50%以上表示されていると見えるとみなされます。

コンフィグstuctureはhere

+0

しかし、どのデータを使用するかはわかります。アイテムは幅が300pなので、中にあれば20pの左右のアイテムが表示されます。ここでは中に入ることができます。しかし、2つの項目がある場合は、データを取得するために次の項目を選択する方法があります。 – 1110

+0

このコールバックは3つのアイテムをすべて表示します。完全に消えたアイテムだけが目に見えないとマークされます。 –

+0

私は画像で質問を更新しました。私は画像のように2つのアイテムを見ることができました。私は1つのアイテムデータ(おそらく別のものよりも目に見えるもの)を取得する必要があります。このコールバックは何とかできますか? – 1110

0

を見つけることができる私は、ページ番号を取得する値のラウンドを取得します

let yOffset = event.nativeEvent.contentOffset.y 
let contentHeight = event.nativeEvent.contentSize.height 
let value = yOffset/contentHeight 

として書きました。

関連する問題