React-Native 组件之 Modal的使用详解


Posted in Javascript onAugust 08, 2017

Modal组件可以用来覆盖包含React Native根视图的原生视图(如UIViewController,Activity),用它可以实现遮罩的效果。

属性

Modal提供的属性有:

animationType(动画类型) PropTypes.oneOf([‘none', ‘slide', ‘fade']

  • none:没有动画
  • slide:从底部滑入
  • fade:淡入视野

onRequestClose(被销毁时会调用此函数)

在 ‘Android' 平台,必需调用此函数

onShow(模态显示的时候被调用)

transparent (透明度) bool

为true时,使用透明背景渲染模态。

visible(可见性) bool

onOrientationChange(方向改变时调用)

在模态方向变化时调用,提供的方向只是 ” 或 ”。在初始化渲染的时候也会调用,但是不考虑当前方向。

supportedOrientations(允许模态旋转到任何指定取向)[‘portrait', ‘portrait-upside-down', ‘landscape','landscape-left','landscape-right'])

在iOS上,模态仍然受 info.plist 中的 UISupportedInterfaceOrientations字段中指定的限制。

示例

Modal的使用非常简单,例如:

<Modal
 animationType='slide'      // 从底部滑入 
 transparent={false}       // 不透明
 visible={this.state.isModal}  // 根据isModal决定是否显示
 onRequestClose={() => {this.onRequestClose()}} // android必须实现
 >

综合例子:

import React, { Component} from 'react';
import {
  AppRegistry,
  View,
  Modal,
  TouchableOpacity,
  Text
} from 'react-native';
export default class ModalView extends Component {
  constructor(props) {
    super(props);
    this.state = {
      modalVisible: false,
    }
  }
  setModalVisible = (visible)=> {
    this.setState({
      modalVisible: visible
    })
  };
  render(){
    return(
      <View style={{flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#ffaaff'}}>
        <Modal animationType={'none'}
            transparent={true}
            visible={this.state.modalVisible}
            onrequestclose={() => {alert("Modal has been closed.")}}
            onShow={() => {alert("Modal has been open.")}}
            supportedOrientations={['portrait', 'portrait-upside-down', 'landscape', 'landscape-left', 'landscape-right']}
            onOrientationChange={() => {alert("Modal has been OrientationChange.")}}>
          <View style={{flex:1, marginTop: 22, backgroundColor: '#aaaaaa', justifyContent: 'center', alignItems: 'center'}}>
            <View>
              <Text>Hello World!</Text>
              <TouchableOpacity onPress={() => {
                this.setModalVisible(false)
              }}>
                <Text>隐藏 Modal</Text>
              </TouchableOpacity>
            </View>
          </View>
        </Modal>
        <TouchableOpacity onPress={() => {
          this.setModalVisible(true)
        }}>
          <Text>显示 Modal</Text>
        </TouchableOpacity>
      </View>
    )
  }
}
AppRegistry.registerComponent('ModalView', ()=>ModalView);

 运行效果:

React-Native 组件之 Modal的使用详解

从 modal 的源码可以看出,modal 其实就是使用了 绝对定位,所以当 modal 无法满足我们的需求的时候,我们就可以通过 绝对定位 自己来封装一个 modal

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
document.getElementById方法在Firefox与IE中的区别
May 18 Javascript
Jquery公告滚动+AJAX后台得到数据
Apr 14 Javascript
jQuery根据纬度经度查看地图处理程序
May 08 Javascript
JavaScript实现更改网页背景与字体颜色的方法
Feb 02 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
详解javascript传统方法实现异步校验
Jan 22 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
Sep 23 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
js实现文字选中分享功能
Jan 25 Javascript
用move.js库实现百叶窗特效
Feb 08 Javascript
Vue函数式组件-你值得拥有
May 09 Javascript
JS实现普通轮播图特效
Jan 01 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
Aug 08 #jQuery
超级简易的JS计算器实例讲解(实现加减乘除)
Aug 08 #Javascript
浅谈ES6新增的数组方法和对象
Aug 08 #Javascript
Angularjs上传文件组件flowjs功能
Aug 07 #Javascript
详解Vue的computed(计算属性)使用实例之TodoList
Aug 07 #Javascript
详解express与koa中间件模式对比
Aug 07 #Javascript
JS实现简单短信验证码界面
Aug 07 #Javascript
You might like
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
[48:53]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第一场
2014/05/26 DOTA
详解Python中的array数组模块相关使用
2016/07/05 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python如何安装第三方模块
2020/05/28 Python
python基于win32api实现键盘输入
2020/12/09 Python
.net软件工程师面试题
2015/03/31 面试题
中专自荐信
2013/10/13 职场文书
党员培训思想汇报
2014/01/07 职场文书
高三语文复习计划
2015/01/19 职场文书
匿名检举信范文
2015/03/02 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers