diff --git a/example/Pages/Avignon.js b/example/Pages/Avignon.js
index 4c1f0c1..876e782 100644
--- a/example/Pages/Avignon.js
+++ b/example/Pages/Avignon.js
@@ -17,7 +17,7 @@ class BasicUsage extends React.Component {
minOverlayOpacity={0.4}
renderHeader={() =>
}
- renderTouchableFixedForeground={() =>
+ renderFixedForeground={() =>
console.log('tap!!')} style={styles.button}>
Discover Avignon now!
diff --git a/src/ImageHeaderScrollView.js b/src/ImageHeaderScrollView.js
index 455d7dd..a5eb193 100644
--- a/src/ImageHeaderScrollView.js
+++ b/src/ImageHeaderScrollView.js
@@ -16,7 +16,6 @@ export type Props = {
renderFixedForeground: () => React.Element,
renderForeground: () => React.Element,
renderHeader: () => React.Element,
- renderTouchableFixedForeground: () => React.Element,
};
export type DefaultProps = {
@@ -27,8 +26,6 @@ export type DefaultProps = {
maxOverlayOpacity: number,
minHeight: number,
minOverlayOpacity: number,
- renderFixedForeground: () => React.Element,
- renderForeground: () => React.Element,
renderHeader: () => React.Element,
};
@@ -50,8 +47,6 @@ class ImageHeaderScrollView extends Component {
maxOverlayOpacity: 0.3,
minHeight: 80,
minOverlayOpacity: 0,
- renderFixedForeground: () => ,
- renderForeground: () => ,
renderHeader: () => ,
};
@@ -106,13 +101,14 @@ class ImageHeaderScrollView extends Component {
]);
const headerScale = this.state.scrollY.interpolate({
- inputRange: [-this.props.maxHeight, 0],
- outputRange: [3, 1],
+ inputRange: [-2 * this.props.maxHeight, 0],
+ outputRange: [5, 1],
extrapolate: 'clamp',
});
+ const height = this.interpolateOnImageHeight([this.props.maxHeight, this.props.minHeight]);
const headerTransformStyle = {
- height: this.props.maxHeight,
+ height,
transform: [{ scale: headerScale }],
};
@@ -121,18 +117,33 @@ class ImageHeaderScrollView extends Component {
{ opacity: overlayOpacity, backgroundColor: this.props.overlayColor },
];
+ const absoluteContainerStyle = {
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ right: 0,
+ height: this.props.maxHeight,
+ };
+
return (
- {this.props.renderHeader()}
-
-
- {this.props.renderFixedForeground()}
+
+ {this.props.renderHeader()}
+
+ {this.props.renderFixedForeground &&
+
+ {this.props.renderFixedForeground()}
+ }
);
}
renderForeground() {
+ if (!this.props.renderForeground) {
+ return null;
+ }
+
const headerTranslate = this.state.scrollY.interpolate({
inputRange: [0, this.props.maxHeight * 2],
outputRange: [0, -this.props.maxHeight * 2 * this.props.foregroundParallaxRatio],
@@ -152,31 +163,6 @@ class ImageHeaderScrollView extends Component {
);
}
- renderTouchableFixedForeground() {
- if (!this.props.renderTouchableFixedForeground) {
- return ;
- }
-
- const height = this.interpolateOnImageHeight([this.props.maxHeight, this.props.minHeight]);
-
- const headerScale = this.state.scrollY.interpolate({
- inputRange: [-this.props.maxHeight, 0],
- outputRange: [3, 1],
- extrapolate: 'clamp',
- });
-
- const headerTransformStyle = {
- height,
- transform: [{ scale: headerScale }],
- };
-
- return (
-
- {this.props.renderTouchableFixedForeground()}
-
- );
- }
-
render() {
const {
children,
@@ -191,18 +177,10 @@ class ImageHeaderScrollView extends Component {
renderFixedForeground,
renderForeground,
renderHeader,
- renderTouchableFixedForeground,
...scrollViewProps
} = this.props;
- const headerScrollDistance = this.interpolateOnImageHeight([maxHeight, maxHeight - minHeight]);
- const topMargin = this.interpolateOnImageHeight([0, minHeight]);
-
- const childrenContainerStyle = StyleSheet.flatten([
- { transform: [{ translateY: headerScrollDistance }] },
- { backgroundColor: 'white', paddingBottom: maxHeight },
- childrenStyle,
- ]);
+ const childrenContainerStyle = StyleSheet.flatten([childrenStyle, { paddingTop: maxHeight }]);
return (
{
ref={ref => (this.container = ref)}
onLayout={() => this.container.measureInWindow((x, y) => this.setState({ pageY: y }))}
>
+ (this.scrollViewRef = ref)}
+ style={styles.container}
+ scrollEventThrottle={16}
+ onScroll={Animated.event([{ nativeEvent: { contentOffset: { y: this.state.scrollY } } }])}
+ {...scrollViewProps}
+ >
+
+ {children}
+
+
{this.renderHeader()}
-
- (this.scrollViewRef = ref)}
- style={styles.container}
- scrollEventThrottle={16}
- onScroll={Animated.event([
- { nativeEvent: { contentOffset: { y: this.state.scrollY } } },
- ])}
- {...scrollViewProps}
- >
-
- {children}
-
-
-
- {this.renderTouchableFixedForeground()}
{this.renderForeground()}
);
@@ -254,19 +227,11 @@ const styles = StyleSheet.create({
justifyContent: 'center',
},
overlay: {
- position: 'absolute',
- top: 0,
- right: 0,
- left: 0,
- bottom: 0,
+ ...StyleSheet.absoluteFillObject,
zIndex: 100,
},
fixedForeground: {
- position: 'absolute',
- top: 0,
- right: 0,
- left: 0,
- bottom: 0,
+ ...StyleSheet.absoluteFillObject,
zIndex: 101,
},
touchableFixedForeground: {