1.1.3 • Published 3 years ago

react-native-stickyheader v1.1.3

Weekly downloads
33
License
MIT
Repository
github
Last release
3 years ago

react-native-stickyheader

npm.io

介绍

此组件实现类似React Native ScrollView组件的吸顶效果。 使用原生驱动动画,支持FlatList,SectionList,ListView等有onScroll方法的组件。

效果

iOSAndroid
npm.ionpm.io

Example

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
  StyleSheet,
  Text,
  View,
  FlatList,
  Dimensions,
  SectionList,
  Animated,
  ScrollView
} from 'react-native';


import StickyHeader from 'react-native-stickyheader';


export default class App extends Component {
  constructor(props) {
    super(props);
    this.state = { scrollY: new Animated.Value(0) }
    this.data = []
    for (let index = 0; index < 100; index++) {
      this.data.push(index)
    }
  }

  _renderItem = (info) => {
    return (
      <View
        style={{ height: 50, backgroundColor: '#ffffff' }}>
        <Text>{info.item}</Text>
      </View>
    )
  }
  _keyExtractor = (item, index) => {
    return index
  }

  render() {

    return (
      <View style={styles.container}>
        <View style={{ height: 64, backgroundColor: '#973444' }}></View>
        <Animated.ScrollView
          onScroll={Animated.event([{
            nativeEvent: { contentOffset: { y: this.state.scrollY, } }
          }], { useNativeDriver: true })}
          scrollEventThrottle={1}
        >
          <Text>文字</Text>
          <Text>文字</Text>
          <Text>文字</Text>
          <Text>文字</Text>
          <StickyHeader
            stickyHeaderY={60} // 滑动到多少悬浮
            stickyScrollY={this.state.scrollY}
          >
            <View style={{ height: 60, backgroundColor: 'red' }} />
          </StickyHeader>
          <FlatList
            ref={flatList => this._flatList = flatList}
            data={this.data}
            keyExtractor={this._keyExtractor}
            renderItem={this._renderItem}
          />
        </Animated.ScrollView>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#ffffff',
    justifyContent: 'center',
  },
});

Note: scrollEventThrottle={1}此属性必须设置且为1,因为要保证有足够的偏移量回调。

react-native-stickyheader 的原理

待整理

Installation

$ npm install react-native-stickyheader --save

Usage (API)

此组件有以下属性:

PropertyTypeRequiredDescription
stickyHeaderYnumberNO滑动到多少悬浮
stickyScrollYanyYes动画的ScrollY回调

更新

1.1.0

  • 支持安卓

1.0.3

  • bug修改

1.0.0

  • 吸顶效果

1.1.2

  • 简化组件

Contributing

此组件受到ScrollView组件启发而成。如果觉得好用,请点一个star,有bug的话请提issue,我会尽快解决。