我正在尝试在React-Native React Navigation 5中使用向下滚动时,使标题从透明变为不透明的固体颜色。滚动到一半时开始过渡到不透明
达到最大偏移量时完全不透明
qrjkbowd1#
您可以通过将标题样式不透明度设置为动画值来执行此操作。首先定义动画值,我们将插值yOffset以获得所需的不透明度。
const yOffset = useRef(new Animated.Value(0)).current; const headerOpacity = yOffset.interpolate({ inputRange: [0, 200], outputRange: [0, 1], extrapolate: "clamp", });
然后你想要附加一个动画.事件监听器到一个动画滚动视图
<Animated.ScrollView onScroll={Animated.event( [ { nativeEvent: { contentOffset: { y: yOffset, }, }, }, ], { useNativeDriver: true } )} scrollEventThrottle={16} >
您的内容应该在滚动视图中在你的屏幕上添加一个挂载或使用效果,你设置animatedValue作为标题不透明度
useEffect(() => { navigation.setOptions({ headerStyle: { opacity: headerOpacity, }, headerBackground: () => ( <Animated.View style={{ backgroundColor: "white", ...StyleSheet.absoluteFillObject, opacity: headerOpacity, }} /> ), headerTransparent: true, }); }, [headerOpacity, navigation]);
我使用了标题透明和标题背景,这样背景组件也会改变。下面是一个示例:https://snack.expo.io/@dannyhw/react-navigation-animated-header
xfyts7mz2#
const handleScroll = () => { YourElementRef.current.style.backgroundColor = `rgba(245, 245, 245, ${window.scrollY > 300 ? 1 : '0.' + (window.scrollY * 3)})`; } window.addEventListener('scroll', handleScroll, true);
您需要添加滚动侦听器和调用函数来使其动画化。scroll元素由ref stuff表示。例如
const YourElementRef = React.useRef(null); <SomeElement ref={YourElementRef}...
zyfwsgd63#
我按照Danny的回答成功地实现了标题动画。我想分享我的解决方案,实现标题的动画:1.将Animated.Header绕在Text组件周围(文本将成为页眉标题):
useEffect(() => { navigation.setOptions({ title: "", headerStyle: { opacity: headerOpacity, }, headerBackground: () => ( <Animated.View style={{ backgroundColor: "white", ...StyleSheet.absoluteFillObject, opacity: headerOpacity, }} > <Text style={styles.headerTitle}>This is the Title</Text> </Animated.View> ), headerTransparent: true, }); }, [headerOpacity, navigation]);
1.使用这些样式来模仿原生iOS标题样式:
const styles = StyleSheet.create({ headerTitle: { fontSize: 17, fontWeight: "600", bottom: 12, textAlign: "center", flex: 1, position: "absolute", width: "100%", }, })
3条答案
按热度按时间qrjkbowd1#
您可以通过将标题样式不透明度设置为动画值来执行此操作。
首先定义动画值,我们将插值yOffset以获得所需的不透明度。
然后你想要附加一个动画.事件监听器到一个动画滚动视图
您的内容应该在滚动视图中
在你的屏幕上添加一个挂载或使用效果,你设置animatedValue作为标题不透明度
我使用了标题透明和标题背景,这样背景组件也会改变。
下面是一个示例:
https://snack.expo.io/@dannyhw/react-navigation-animated-header
xfyts7mz2#
您需要添加滚动侦听器和调用函数来使其动画化。scroll元素由ref stuff表示。例如
zyfwsgd63#
我按照Danny的回答成功地实现了标题动画。
我想分享我的解决方案,实现标题的动画:
1.将Animated.Header绕在Text组件周围(文本将成为页眉标题):
1.使用这些样式来模仿原生iOS标题样式: