Last active
July 4, 2024 12:57
-
-
Save mmazzarolo/cfd467436f9d110e94a685b06eb3900f to your computer and use it in GitHub Desktop.
react-native-action-button hide on scroll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 1. Define a state variable for showing/hiding the action-button | |
state = { | |
isActionButtonVisible: true | |
} | |
// 2. Define a variable that will keep track of the current scroll position | |
_listViewOffset = 0 | |
// 3. Add an onScroll listener to your listview/scrollview | |
<ListView | |
... | |
onScroll={this._onScroll} | |
... | |
/> | |
// 3. Add some logic in the scroll listener for hiding the action button when scrolling down | |
_onScroll = (event) => { | |
// Simple fade-in / fade-out animation | |
const CustomLayoutLinear = { | |
duration: 100, | |
create: { type: LayoutAnimation.Types.linear, property: LayoutAnimation.Properties.opacity }, | |
update: { type: LayoutAnimation.Types.linear, property: LayoutAnimation.Properties.opacity }, | |
delete: { type: LayoutAnimation.Types.linear, property: LayoutAnimation.Properties.opacity } | |
} | |
// Check if the user is scrolling up or down by confronting the new scroll position with your own one | |
const currentOffset = event.nativeEvent.contentOffset.y | |
const direction = (currentOffset > 0 && currentOffset > this._listViewOffset) | |
? 'down' | |
: 'up' | |
// If the user is scrolling down (and the action-button is still visible) hide it | |
const isActionButtonVisible = direction === 'up' | |
if (isActionButtonVisible !== this.state.isActionButtonVisible) { | |
LayoutAnimation.configureNext(CustomLayoutLinear) | |
this.setState({ isActionButtonVisible }) | |
} | |
// Update your scroll position | |
this._listViewOffset = currentOffset | |
} | |
// 4. In you render show you action-button only if state.isActionButtonVisible === true | |
<View style={styles.container}> | |
{yourListView} | |
{this.state.isActionButtonVisible ? <ActionButton /> : null} | |
</View> |
thanks
any solution with Reanimated?? I dont want to useState + LayoutAnimation because it's may took glitch with Android
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
i have a problem
when i use Animated.Scrollview and when i pass the parameter (handleScroll ) some other components in the screen also hid