React UI设计黑色蒙层#000000 80%,首次打开弹出,点击图片可以关闭

javascript 复制代码
import { MainProps } from "@src/component/MaskPannel";
import React, { useState } from "react";
import { StyleSheet, View, TouchableOpacity, Image, Text } from 'react-native';

import { UI } from 'xxxxxx'; // 可以自定义Icon图库
const { Icon } = UI;

const MaskPannel: React.FC<MainProps> = (props: MainProps) => {
    const [visible, setVisible] = useState(true);

    const handleClose = () => {
        setVisible(false);
    };

    const handleMinimize = () => {
        // 处理最小化逻辑
    };

    const handleHelp = () => {
        // 处理帮助逻辑
    };

    return (
        <View style={styles.container}>
            <View style={styles.header}>
                <Text style={styles.headerText}>黑色蒙层和覆盖透明图片</Text>
                <View style={styles.iconContainer}>
                    <TouchableOpacity onPress={handleHelp} style={styles.iconButton}>
                        <Icon type='question-circle-o' size={18} tintColor='rgba(255, 255, 255, 0.7)' />
                    </TouchableOpacity>
                    <TouchableOpacity onPress={handleMinimize} style={styles.iconButton}>
                        <Icon type='minus' size={18} tintColor='rgba(255, 255, 255, 0.7)' />
                    </TouchableOpacity>
                    <TouchableOpacity onPress={handleClose} style={styles.iconButton}>
                        <Icon type='times' size={18} tintColor='rgba(255, 255, 255, 0.7)' />
                    </TouchableOpacity>
                </View>
            </View>
            <View style={styles.wrap}>
                {visible && (
                    <View style={styles.overlayContainer}>
                        <TouchableOpacity style={styles.overlay} onPress={handleClose}>
                            <Image source={require('@src/assets/test/bk.png')} style={styles.overlayImage} />
                        </TouchableOpacity>
                    </View>
                )}

                <View style={styles.effectsRow}>
                    <TouchableOpacity style={styles.effectContainer}>
                        <Image source={require('@src/assets/test/pika1.gif')} style={styles.effectImage} />
                        <Text style={styles.effectText}>城堡</Text>
                    </TouchableOpacity>
                    <TouchableOpacity style={styles.effectContainer}>
                        <Image source={require('@src/assets/test/pika2.gif')} style={styles.effectImage} />
                        <Text style={styles.effectText}>发射爱心</Text>
                    </TouchableOpacity>
                    <TouchableOpacity style={styles.effectContainer}>
                        <Image source={require('@src/assets/test/pika3.gif')} style={styles.effectImage} />
                        <Text style={styles.effectText}>创世纪摩托车</Text>
                    </TouchableOpacity>
                </View>
            </View>
        </View>
    );
}

const styles = StyleSheet.create({
    container: {
        // flex: 1,
        borderTopLeftRadius: 12,
        borderTopRightRadius: 12,
        overflow: 'hidden',
        height: 576
    },
    wrap: {
        // flex: 1,
        backgroundColor: '#2E3137',
        paddingTop: 10,
        paddingHorizontal: 20,
    },
    header: {
        flexDirection: 'row',
        justifyContent: 'space-between',
        alignItems: 'center',
        paddingHorizontal: 10,
        paddingVertical: 5,
        backgroundColor: '#25272C',
        height: 40,
    },
    headerText: {
        color: '#FFFFFF',
        fontSize: 14,
        fontWeight: '400',
        fontFamily: 'Microsoft YaHei',
        lineHeight: 16,
    },
    iconContainer: {
        width: 98,
        height: 18,
        flexDirection: 'row',
        justifyContent: 'space-between',
        alignItems: 'center',
    },
    iconButton: {
        width: 18,
        height: 18,
        justifyContent: 'center',
        alignItems: 'center',
    },
    overlayContainer: {
        ...StyleSheet.absoluteFillObject,
        zIndex: 2,
    },
    overlay: {
        ...StyleSheet.absoluteFillObject,
        backgroundColor: 'rgba(0, 0, 0, 0.8)',
    },
    overlayImage: {
        width: 375,
        height: 536,
    },
    effectsRow: {
        flexDirection: 'row',
        justifyContent: 'space-between',
        marginTop: 20,
    },
    effectContainer: {
        alignItems: 'center',
        width: 100,
        backgroundColor: '#2E3137',
        padding: 10,
        borderRadius: 10,
    },
    effectImage: {
        width: 50,
        height: 50,
        marginBottom: 8,
    },
    effectText: {
        fontFamily: 'Microsoft YaHei',
        color: '#FFFFFF',
        fontSize: 12,
    },
});

export default MaskPannel;

1.黑色蒙层#000000 80%,首次打开弹出

2.点击图片可以关闭

相关推荐
傻小胖1 小时前
Object.defineProperty() 完整指南
开发语言·前端·javascript
hong1616881 小时前
TypeScript类型断言
linux·javascript·typescript
BUG_Jia1 小时前
Vue 3 组件封装与使用:保姆级教程
前端·javascript·vue.js
思成Codes1 小时前
从本质看:Vue3 为什么运用 LIS 算法
javascript·vue.js
江湖行骗老中医2 小时前
Pinia 是 Vue 的专属状态管理库
前端·javascript·vue.js
张元清2 小时前
React 鼠标追踪与交互效果实战
前端·javascript·面试
kyriewen2 小时前
你的JS代码总在半夜崩溃?TypeScript来“上保险”了
前端·javascript·typescript
iReachers2 小时前
HTML打包EXE配置管理教程:多项目打包设置一键保存、加载与切换
java·前端·javascript
whuhewei2 小时前
js事件循环
前端·javascript