Javascript 页面滑块在Android上不工作,在iOS上工作正常
下面的代码显示了如何实现所有函数 在iOS上一切正常,按钮改变幻灯片,底部的点根据页面改变状态,最后一页显示注册按钮 在Android上,按钮只在第一页起作用,最后一页不显示注册按钮,下一页按钮在第二页不起作用Javascript 页面滑块在Android上不工作,在iOS上工作正常,javascript,react-native,react-native-android,react-native-ios,Javascript,React Native,React Native Android,React Native Ios,下面的代码显示了如何实现所有函数 在iOS上一切正常,按钮改变幻灯片,底部的点根据页面改变状态,最后一页显示注册按钮 在Android上,按钮只在第一页起作用,最后一页不显示注册按钮,下一页按钮在第二页不起作用 export default function introScreen({ navigation }) { const [sliderState, setSliderState] = useState({ currentPage: 0 }); const scrollRef = useR
export default function introScreen({ navigation }) {
const [sliderState, setSliderState] = useState({ currentPage: 0 });
const scrollRef = useRef();
const { width, height } = Dimensions.get('window')
const notchSize = StatusBar.currentHeight
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;
const onPressTouch = () => {
scrollRef.current?.scrollTo({
x: width*(pageIndex+1),
animated: true,
});
}
return (
<>
<StatusBar hidden />
<SafeAreaView style={{ flex: 1, backgroundColor:'black' }}>
<ScrollView
style={{ flex: 1 }}
horizontal={true}
scrollEventThrottle={16}
pagingEnabled={true}
showsHorizontalScrollIndicator={false}
onScroll={(event: any) => {
setSliderPage(event);
}}
ref={scrollRef}
>
<View style={{ width, height, alignItems: 'center', }}>
<Image source={require('../../assets/images/Intorduction/1.png')} style={styles.imageStyle} />
<BlurView tint={'dark'} intensity={70} style={{width:'80%',borderRadius:10, marginTop:10}}>
<Text style={[styles.textStyle,{color:'rgb(255, 190, 46)'}]}bla bla</Text>
</BlurView>
</View>
<View style={{ width, height, alignItems: 'center' }}>
<Image source={require('../../assets/images/Intorduction/2.png')} style={styles.imageStyle} />
<BlurView tint={'dark'} intensity={70} style={{width:'80%',borderRadius:10, marginTop:10}}>
<Text style={[styles.textStyle,{color:'rgb(255, 190, 46)'}]}>bla bla</Text>
</BlurView>
</View>
<View style={{ width, height, alignItems: 'center' }}>
<Image source={require('../../assets/images/Intorduction/3.png')} style={styles.imageStyle} />
<BlurView tint={'light'} intensity={70} style={{width:'80%',borderRadius:10, marginTop:10}}>
<Text style={[styles.textStyle,{color:'rgb(241, 250, 238)'}]}>bla bla</Text>
</BlurView>
</View>
</ScrollView>
{pageIndex != 2 ?
<View style={styles.paginationWrapper}>
{Array.from(Array(3).keys()).map((key, index) => (
<View style={[styles.paginationDots, { opacity: pageIndex === index ? 1 : 0.2 }]} key={index} />
))}
</View>
:
<></>
}
{pageIndex != 2 ?
<BlurView tint={'dark'} intensity={70} style={styles.nextButton}>
<TouchableOpacity style={{flex:1, justifyContent:'center', alignItems:'center'}} onPress={onPressTouch} >
<Text style={{color:'rgb(241, 250, 238)',fontFamily: 'poiret-one', fontSize:25}}>
Next
</Text>
</TouchableOpacity>
</BlurView>
:
<BlurView tint={'light'} intensity={70} style={styles.signUpButton}>
<TouchableOpacity style={{flex:1, justifyContent:'center', alignItems:'center'}} onPress={() =>navigation.navigate('Login')} >
<Text style={{color:'black',fontFamily: 'poiret-one', fontSize:25}}>
Sign Up
</Text>
</TouchableOpacity>
</BlurView>
}
</SafeAreaView>
</>
);
}
export default function introScreen({navigation}){
常量[sliderState,setSliderState]=useState({currentPage:0});
const scrollRef=useRef();
const{width,height}=Dimensions.get('window')
const notchSize=StatusBar.currentHeight
const setSliderPage=(事件:any)=>{
const{currentPage}=滑块状态;
const{x}=event.nativeEvent.contentOffset;
const indexOfNextScreen=数学楼层(x/宽度);
如果(indexOfNextScreen!==currentPage){
固定滑块状态({
…滑块状态,
当前页面:indexOfNextScreen,
});
}
};
常量{currentPage:pageIndex}=sliderState;
const onPressTouch=()=>{
scrollRef.current?.scrollTo({
x:宽度*(页面索引+1),
是的,
});
}
返回(
{
设置滑动页面(事件);
}}
ref={scrollRef}
>
(
))}
:
}
{pageIndex!=2?
下一个
:
导航。导航('Login')}>
注册
}
);
}
我已将问题缩小到宽度和“event.nativeEvent.contentOffset”上,返回的数字接近1,但它是(0.9),因此math.floor将0作为索引号
我把Math.floor改为Math.round,它运行得非常好
如果任何人想要为他们的应用程序提供介绍滑块,他们可以使用此问题来自SafeAreaView。如果你移除它,它就会工作!