此组件实现类似React Native ScrollView组件的吸顶效果。
使用原生驱动动画,支持FlatList,SectionList,ListView等有onScroll
方法的组件。
iOS | Android |
---|---|
import React, { useState, useCallback, useRef, useEffect } from 'react';
import { StyleSheet, Text, View, FlatList, Animated } from 'react-native';
import StickyHeader from 'react-native-stickyheader';
function App() {
const scrollY = useRef(new Animated.Value(0));
const [data, setData] = useState([]);
useEffect(() => {
let array = [];
for (let index = 0; index < 100; index++) {
array.push(index);
}
setData(array);
}, []);
const renderItem = useCallback((info) => {
return (
<View style={{ height: 50, backgroundColor: '#ffffff' }}>
<Text>{info.item}</Text>
</View>
);
}, []);
const keyExtractor = useCallback((item, index) => {
return index + '';
}, []);
return (
<View style={styles.container}>
<View style={{ height: 64, backgroundColor: '#973444' }} />
<Animated.ScrollView
onScroll={Animated.event(
[
{
nativeEvent: { contentOffset: { y: scrollY.current } },
},
],
{ useNativeDriver: true },
)}
scrollEventThrottle={1}
>
<Text>文字</Text>
<Text>文字</Text>
<Text>文字</Text>
<Text>文字</Text>
<StickyHeader
stickyHeaderY={60} // 滑动到多少悬浮
stickyScrollY={scrollY.current}
>
<View style={{ height: 60, backgroundColor: '#d22222' }} />
</StickyHeader>
<FlatList
data={data}
keyExtractor={keyExtractor}
renderItem={renderItem}
/>
</Animated.ScrollView>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#ffffff',
justifyContent: 'center',
},
});
Note: scrollEventThrottle={1}
此属性必须设置且为1,因为要保证有足够的偏移量回调。
待整理
$ npm install react-native-stickyheader --save
此组件有以下属性:
Property | Type | Required | Description |
---|---|---|---|
stickyHeaderY |
number |
NO | 滑动到多少悬浮 |
stickyScrollY |
any |
Yes | 动画的ScrollY回调 |
- 支持安卓
- bug修改
- 吸顶效果
- 简化组件
- react hook
此组件受到ScrollView组件启发而成。如果觉得好用,请点一个star,有bug的话请提issue,我会尽快解决。