Javascript 页面滑块在Android上不工作,在iOS上工作正常

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

下面的代码显示了如何实现所有函数

在iOS上一切正常,按钮改变幻灯片,底部的点根据页面改变状态,最后一页显示注册按钮

在Android上,按钮只在第一页起作用,最后一页不显示注册按钮,下一页按钮在第二页不起作用

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。如果你移除它,它就会工作!