javascript - ScrollView 分页问题
问题描述
我跟着这个教程
https://medium.com/backticks-tildes/create-a-custom-app-intro-slider-in-react-native-4308fae83ad1
但是,分页指示器在某些屏幕上无法正常工作。
例如,在Pixel 5 模拟器上,前 2 个屏幕的分页不会改变,而最后一张幻灯片的分页显示的是之前的幻灯片。
看看这些视频:
有 2 个视频显示 Pixel 5 和 Nexus S
我的代码与教程中的代码完全相同:
const App = () => {
const [sliderState, setSliderState] = useState({ currentPage: 0 });
const { width, height } = Dimensions.get('window');
const setSliderPage = (event: any) => {
const { currentPage } = sliderState;
const { x } = event.nativeEvent.contentOffset;
const indexOfNextScreen = Math.floor(x / width);
if (indexOfNextScreen !== currentPage) {
setSliderState({
...sliderState,
currentPage: indexOfNextScreen,
});
}
};
const { currentPage: pageIndex } = sliderState;
return (
<>
<StatusBar barStyle="dark-content" />
<SafeAreaView style={{ flex: 1 }}>
<ScrollView
style={{ flex: 1 }}
horizontal={true}
scrollEventThrottle={16}
pagingEnabled={true}
showsHorizontalScrollIndicator={false}
onScroll={(event: any) => {
setSliderPage(event);
}}
>
<View style={{ width, height }}>
<View style={styles.wrapper}>
<Text style={styles.header}>Nature Imitates Art</Text>
<Text style={styles.paragraph}>....something like that</Text>
</View>
</View>
<View style={{ width, height }}>
<View style={styles.wrapper}>
<Text style={styles.header}>High quality Art work</Text>
<Text style={styles.paragraph}>... for a fraction of the price</Text>
</View>
</View>
<View style={{ width, height }}>
<View style={styles.wrapper}>
<Text style={styles.header}>Top Notch Artists</Text>
<Text style={styles.paragraph}>... all in one place</Text>
</View>
</View>
<View style={{ width, height }}>
<View style={styles.wrapper}>
<Text style={styles.header}>Best deal on the market</Text>
<Text style={styles.paragraph}>... let's find your next art</Text>
</View>
</View>
<View style={{ width, height }}>
<View style={styles.wrapper}>
<Text style={styles.header}>It's all about art</Text>
<Text style={styles.paragraph}>... seriously, it is</Text>
</View>
</View>
</ScrollView>
<View style={styles.paginationWrapper}>
{Array.from(Array(5).keys()).map((key, index) => (
<View style={[styles.paginationDots, { opacity: pageIndex === index ? 1 : 0.2 }]} key={index} />
))}
</View>
</SafeAreaView>
</>
);
};
为什么会这样?这在某些屏幕上正常工作并且在某些屏幕上出现故障的原因是什么?
解决方案
推荐阅读
- javascript - 谷歌地图被隐藏并且在我制作动画时不会出现,请参阅问题中的图片以了解我的意思
- azure - 为什么我的订阅中没有“可用尺寸”,而我每月获得 150 美元的积分?
- java - 如何修复 xls/xlsx getfiledata struts 的输出流上的 Validation.EncodingRequired 问题
- reactjs - 有没有办法在加密相同的数据时获得相同的加密密钥?
- python - 如何查找、突出显示文本和删除上移单元格?
- angular - Angular 中的服务文件和视图存在问题
- python - 使用scrapy python使用POST请求获取json响应
- excel - 使用 VBA,我想计算一个字符串在特定列中出现的次数
- android - 创建新的状态栏不适用于 targetSdkVersion 30
- node.js - 如何在 mongoose-paginate-v2 中使用 find?