gpt4 book ai didi

react-native - 我如何在 react 原生滚动条中设置滚动指示器的样式

转载 作者:行者123 更新时间:2023-12-04 07:49:00 27 4
gpt4 key购买 nike

我想为我的垂直滚动条中的滚动指示器添加一些样式,用于 react 原生。我想让滚动指示器比默认大小更宽,以便用户可以清楚地看到滚动指示器。以及我想更改滚动指示器中的颜色和其他一些东西。

我怎么能这样做。是否可以在 native react 中在垂直 ScrollView 中设置滚动指示器..

也应该在任何平台上兼容

最佳答案

您可以使用Animated from react-native , onLayout , onContentSizeChange , 和 onScroll从 ScrollView 和一些数学来完成这个。
基本上,您可以将 ScrollView 的可见高度与内容的实际完整大小(可见和隐藏)进行比较,这样您就知道滚动条的高度。然后,您只需在用户滚动时更新该栏的位置。
请参阅以下带有反应 Hook 的代码示例:

const CustomScrollBarComponent = () => {
const [completeScrollBarHeight, setCompleteScrollBarHeight] = useState(1);
const [visibleScrollBarHeight, setVisibleScrollBarHeight] = useState(0);
const scrollIndicator = useRef(new Animated.Value(0)).current;

const scrollIndicatorSize =
completeScrollBarHeight > visibleScrollBarHeight
? (visibleScrollBarHeight * visibleScrollBarHeight)
/ completeScrollBarHeight
: visibleScrollBarHeight;

const difference =
visibleScrollBarHeight > scrollIndicatorSize
? visibleScrollBarHeight - scrollIndicatorSize
: 1;

const scrollIndicatorPosition = Animated.multiply(
scrollIndicator,
visibleScrollBarHeight / completeScrollBarHeight,
).interpolate({
extrapolate: 'clamp',
inputRange: [0, difference],
outputRange: [0, difference],
});

const onContentSizeChange = (_, contentHeight) =>
setCompleteScrollBarHeight(contentHeight);

const onLayout = ({
nativeEvent: {
layout: { height },
},
}) => {
setVisibleScrollBarHeight(height);
};

return (
<View style={styles.scrollContainer}>
<ScrollView
contentContainerStyle={{ paddingRight: 14 }}
onContentSizeChange={onContentSizeChange}
onLayout={onLayout}
onScroll={Animated.event(
[{ nativeEvent: { contentOffset: { y: scrollIndicator } } }],
{ useNativeDriver: false },
)}
scrollEventThrottle={16}
showsVerticalScrollIndicator={false}
style={styles.scrollViewContainer}
>
{/* Your ScrollView content here */}
</ScrollView>
<View style={styles.customScrollBarBackground}>
<Animated.View
style={[
styles.customScrollBar,
{
height: scrollIndicatorSize,
transform: [{ translateY: scrollIndicatorPosition }],
},
]}
/>
</View>
</View>
);
};
款式:
const styles = StyleSheet.create({
scrollContainer: {
flexDirection: 'row',
width: '100%',
},
scrollViewContainer: {
width: '100%',
},
customScrollBar: {
backgroundColor: '#ccc',
borderRadius: 3,
width: 6,
},
customScrollBarBackground: {
backgroundColor: '#232323',
borderRadius: 3,
height: '100%',
width: 6,
},
});

关于react-native - 我如何在 react 原生滚动条中设置滚动指示器的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50754284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com