当前位置: 首页 > Web前端 > HTML

React导航实现透明弹窗

时间:2023-03-28 00:26:04 HTML

在ReactNative开发中,如果想实现弹窗效果,通常的解决方案是使用官方提供的Modal组件。但是,官方的Modal组件存在一些缺陷。比如在Android端无法全屏显示,而在iOS端,当打开一个新的ViewController时,会被Modal组件覆盖。因此,在ReactNative应用开发中,为了屏蔽这些兼容性问题,我们可以使用react-native-root-siblings插件提供的RootSiblings组件。RootSiblings组件其实是对官方Modal组件的进一步封装,可以有效解决Modal组件的一些显示问题,使用方法与Modal组件类似,如下图。从'react-native-root-siblings'导入RootSiblings;constalertShare=(onItemPress,onCancel,title)=>{if(global.siblingShare){global.siblingShare.destroy();onCancel();global.siblingShare=undefined;}else{global.siblingShare=newRootSiblings(());}};//调用分享方法alertShare(onItemPress,()=>{startAnimation(setShow(false));})可以看到,只需要使用RootSiblings组件将要分享的内容包裹起来即可完成分享功能。另外,我们还可以使用reactnavigation来实现购物车的弹窗。原理是让reactnavigation的路由页面背景透明。下面直接上传代码。如果不清楚ReactNavigation的使用,可以参考ReactNavigation5.x的基本使用。最新的6.x版本一般都是类似的使用方式。首先我们看一下导航的index.js代码。constRootStack=createStackNavigator();constNavigator=()=>{return(<>{返回{overlayStyle:{不透明度:进度。interpolate({inputRange:[0,1],outputRange:[0,0.5],extrapolate:'clamp',}),},}},}}/>);};exportdefaultNavigator;可以看到为了使用路由实现透明,我们在配置RootStack.Screen的options参数,需要特别注意cardStyle和cardStyleInterpolator这两个参数。建议直接复制选项里的内容接下来是ModalsScreen.js的代码:constModalStack=createStackNavigator()exportdefaultfunctionModalsScreen(){return()}除了设置ModalScreen的背景为透明外,还需要设置具体业务页面的背景也设置为透明。可以看到,在上面的代码中,我们还设置了ShoppingCartScreen页面的背景为透明。接下来使用navigate在需要跳转的地方执行跳转。navigate('MyModal',{screen:'ShoppingCartScreen'})然后就可以看到效果了。参考:ReactNavigation透明背景在ReactNavigation5.x中实现屏幕透明背景