可动态增加、删除的全局蒙灰弹层

2023-11-06

import React, { Component } from 'react'
import PropTypes from 'prop-types'
import assign from 'object-assign'
import _ from 'lodash'
import {
  observable,
  action,
} from 'mobx'
import {
  observer,
} from 'mobx-react'
import uuidv1 from 'uuid/v1'

import './index.less'

const popupComps = observable.object({
  size: 0,
}, {}, { deep: false })

window.popupComps = popupComps

@observer
class PopUpLayer extends Component {
  static add = action((comp, mode = 'gray') => { // mode 可选值为 gray 或 transparent
    console.log('add comp ', comp, React.isValidElement(comp))
    if (React.isValidElement(comp)) {
      const key = uuidv1()
      const containerStyle = {}
      if (mode === 'transparent') {
        containerStyle.backgroundColor = 'rgba(0, 0, 0, 0)'
      }
      popupComps[key] = (
        <div className="popup-component-wrap" key={key} style={containerStyle}>
          {
            React.cloneElement(comp, {
              onClose: _.flow(comp.props.onClose || _.noop, () => { PopUpLayer.remove(key) }),
            })
          }
        </div>
      )
      popupComps.size += 1
      return key
    }
    return null
  })

  static remove = action((key) => {
    const comp = popupComps[key]
    if (_.isNil(comp) === false) {
      delete popupComps[key]
      popupComps.size -= 1
    }
  })

  static propTypes = {
    style: PropTypes.object,
  }

  static defaultProps = {
    style: {},
  }

  componentDidMount() {
  }

  componentWillUnmount() {
  }

  timeOutFlag

  render() {
    const wrapStyles = assign({}, this.props.style, {
      visibility: popupComps.size > 0 ? 'visible' : 'hidden',
    })

    return (
      <div className="popup-layer-wrap" style={wrapStyles}>
        {
          _.map(_.values(popupComps), (comp, i) => {
            return React.isValidElement(comp) ? (
              React.cloneElement(comp, {
                style: _.assign(comp.props.style, {
                  zIndex: i,
                }),
              })
            ) : null
          })
        }
      </div>
    )
  }
}

export default PopUpLayer
.popup-layer-wrap {
  position: absolute;
  top:0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 10000;

  .popup-component-wrap {
    position: absolute;
    top:0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
  }
}

 

转载于:https://www.cnblogs.com/chenbeibei520/p/11446587.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可动态增加、删除的全局蒙灰弹层 的相关文章

随机推荐

  • dll、so库转Java代码

    dll so库转Java代码 下载jar JNA代码生成 参数说明 生成的maven项目代码结构如下 众所周知 java程序如果要调用动态库 so dll 的函数 最传统方式是使用JNI技术 用JNI写java调用接口代码是非常痛苦的 调试
  • 538.把二叉搜素树转换为累加树

    538 把二叉搜索树转换为累加树 题干描述 解题思路 递归 1 递归函数参数以及返回值 2 确定终止条件 3 确定单层递归的逻辑 迭代 代码实现 递归法 迭代法 题干描述 力扣入口 给出二叉搜索树的根节点 该树的节点值各不相同 请你将其转换
  • 13智慧农业

    一张图读懂一个产业之智慧农业 一般认为 智慧农业指的是利用物联网 人工智能 大数据等现代信息技术与农业进行深度融合 实现农业生产全过程的信息感知 精准管理和智能控制的一种全新的农业生产方式 可实现农业可视化诊断 远程控制以及灾害预警等功能
  • 时序预测:使用MATLAB实现时间序列回归中的偏差估计

    时序预测 使用MATLAB实现时间序列回归中的偏差估计 时间序列数据分析是指对某个时间段内连续的数据进行建模和预测的过程 在时间序列分析中 通常需要进行时序预测 即预测未来的数据值 时间序列回归是一种在保持时间序列结构的同时 通过相关数据来
  • 性能测试项目实战:应用加载慢该怎么办?

    一 背景 app收到留学push 课堂 资讯 用户点击push消息 进入app 应用加载很慢 容易出现应用假死 app崩溃或提示网络异常等信息 给用户体验十分不友好 监控阿里云资源tcp连接数飙高 cpu打满 自愈能力 系统恢复能力 低 二
  • taro + linaria styled 报错 Property ‘__linaria‘ is missing

    更新 下面的解决方案不好 估计暂时不支持 我先用css 功能 报错信息 FileDescription Author 刘凯 Date 2021 04 26 08 53 19 LastEditors 刘凯 LastEditTime 2021
  • C++对于const重铸,在结构体中的const引用通过const_cast转换值

    include
  • 在VS中安装Qt插件(配置Qt环境)

    1 下载Qt的插件 Qt插件的网址 http download qt io archive 2 将Qt插件安装到vs上 下载完毕后会得到后缀名为 vsix 的工具 直接运行这个插件 前提是你电脑上已经安装了vs 安装过程等待 安装成功 3
  • 2019南科大计算机系夏令营笔试&面试

    2019南科大计算机系夏令营笔试 面试 笔试 笔试时间2个小时 卷面总分200分 其中操作系统50分 数据结构50分 离散数学50分 计算机网络50分 操作系统为中文题目 其余均为英文题目 操作系统考察进程相关知识占比很大 如进程执行时间
  • oauth2.0的配置信息AuthorizationServerConfigurerAdapter

    继承AuthorizationServerConfigurerAdapter方法的配置 Configuration EnableAuthorizationServer public class Oauth2ServerConfig exte
  • 求解矩阵最小路径和(详细分析)

    求解矩阵最小路径和 给定一个m行n列的矩阵 从左上角开始每次只能向右或者向下移动 最后到达右下角的位置 路径上的所有数字累加起来作为这条路径的路径和 如下面一个4行4列的矩阵 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0
  • Flutter插件开发集成aar包出现:Could not determine the dependencies of task ':flutter_vpn:compileDebugAidl'.问题

    概述 最近在做一个Flutter的插件开发 需要在android及ios原生中集成sdk 然后Flutter通过插件调用sdk的方法 这其中涉及到aar包的集成 虽然是Flutter的插件开发 但是关于android原生的aar包集成还是差
  • 网络--tcp协议中控制位

    网络层中的tcp协议 首先看一下tcp的报头信息 其中其余的好理解 但是它是拥有了6个控制位的 说明了此次报文段的性质 紧急URG URGent 当URG等于1时 表明紧急指针字段有效 它告诉系统此报文段中有紧急数据 应尽快传送 相当于高优
  • MySQL 索引 详解(保姆级教程)

    一 索引概述 索引是帮助 MySQL 高效获取数据的数据结构 有序 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指向 数据 这样就可以在这些数据结构上实现高级查询算法 这种数据结构就是索引 二 索引
  • STM32学习日记--Day3--PWM驱动LED灯

    PWM基本结构 主函数 include stm32f10x h Device header include Delay h include OLED h include PWM h uint8 t i int main void OLED
  • Java --- JVM堆的概述与内存细分

    目录 一 堆 二 堆的内存细分 一 堆 1 一个JVM实例只存在一个堆内存 堆也是Java内存管理的核心区域 2 Java堆区在JVM启动的时候即被创建 其空间大小也就确定了 是JVM管理的最大一块内存空间 堆内存的大小是可以调节的 参考代
  • 典型MOSFET制造工艺流程示意图

    复旦大学姜玉龙的课程 半导体器件 截图 图中有的红点是鼠标 下面将阐述这个工艺过程 硅片基底 假设厚度800um 实际上只有上表层有用大概10um厚度左右 然后填充氧化物 用来隔离 然后进行阱注入 可以选择两边分别注入N阱或者P阱 从而隔开
  • 刷题网站

    力扣 这个网站中题解真的是非常丰富 适合新手刷题 不会的可以看看题解 而且适合于练习各种常见的算法 面试求职 英文网址 https leetcode com 中文网址 https leetcode cn com 最近在备战蓝桥杯的时候发现一
  • Python的递归深度问题

    1 Python默认的递归深度是有限制的 当递归深度超过默认值的时候 就会引发RuntimeError 理论在997 2 解决方法 最大递归层次的重新调整 解决方式是手工设置递归调用深度 import sys sys setrecursio
  • 可动态增加、删除的全局蒙灰弹层

    import React Component from react import PropTypes from prop types import assign from object assign import from lodash i