Openharmony & VCordova三方库适配1.2.0 - 弹窗组件

📊 UI 展示

默认弹窗

在这里插入图片描述

确认框

在这里插入图片描述

成功提示

在这里插入图片描述

错误提示

在这里插入图片描述

为什么需要弹窗组件

在 v1.0.0 和 v1.1.0 中,我们完成了数据展示的功能。现在数据有了,图表也有了,但用户交互呢?

弹窗是最常见的交互方式。删除操作需要确认,操作成功需要提示,出错了需要告诉用户。这些都需要弹窗。

v1.2.0 的弹窗组件支持多种类型:提示框、确认框、成功提示、错误提示等。提供丰富的自定义选项和流畅的动画效果。


快速上手

第一步:引入文件

<link rel="stylesheet" href="components/modal/modal.css">
<script src="components/modal/modal.js"></script>

CSS 文件包含弹窗的样式,JS 文件包含 Modal 类的实现。

第二步:创建弹窗

const modal = new Modal({
    title: '提示',
    content: '这是一个弹窗',
    type: 'default'
});

创建一个弹窗实例很简单。传入一个配置对象,包含以下属性:

  • title: 弹窗标题
  • content: 弹窗内容
  • type: 弹窗类型,支持 ‘default’、‘alert’、‘confirm’、‘success’、‘error’

第三步:打开弹窗

modal.open();

调用 open() 方法就能打开弹窗。弹窗会显示在屏幕中央,带有遮罩和动画效果。

第四步:关闭弹窗

modal.close();

调用 close() 方法就能关闭弹窗。用户也可以点击关闭按钮或遮罩来关闭。


弹窗类型

default(默认)

const modal = new Modal({
    title: '默认弹窗',
    content: '这是一个默认类型的弹窗',
    type: 'default'
});

modal.open();

默认弹窗用于一般的提示。没有特殊的样式,就是一个普通的弹窗。

alert(提示)

Modal.alert('提示', '这是一个提示框', () => {
    console.log('用户点击了确定');
});

提示框用于显示简单的信息提示。只有一个"确定"按钮。这是一个快捷方法,不需要手动创建实例。

confirm(确认)

Modal.confirm('确认删除', '确定要删除吗?', () => {
    console.log('用户点击了确定');
}, () => {
    console.log('用户点击了取消');
});

确认框用于需要用户确认的操作。有"确定"和"取消"两个按钮。可以分别处理确认和取消的回调。

success(成功)

Modal.success('成功', '操作已完成', () => {
    console.log('用户点击了确定');
});

成功提示用于操作成功的提示。标题前会自动添加一个绿色的对勾符号。

error(错误)

Modal.error('错误', '操作失败,请重试', () => {
    console.log('用户点击了确定');
});

错误提示用于操作失败的提示。标题前会自动添加一个红色的叉号符号。


自定义按钮

有时候需要自定义弹窗的按钮。

创建自定义按钮

const modal = new Modal({
    title: '选择操作',
    content: '请选择要执行的操作',
    buttons: [
        {
            text: '保存',
            type: 'primary',
            onClick: () => {
                console.log('用户点击了保存');
            }
        },
        {
            text: '取消',
            type: 'secondary',
            onClick: () => {
                console.log('用户点击了取消');
            }
        }
    ]
});

modal.open();

buttons 是一个数组,每个元素是一个按钮对象。按钮对象包含以下属性:

  • text: 按钮文字
  • type: 按钮类型,‘primary’ 或 ‘secondary’
  • onClick: 点击回调函数
  • closeAfterClick: 点击后是否关闭弹窗,默认 true

按钮类型

  • primary: 主按钮,通常用于确认操作,背景色为主色
  • secondary: 次按钮,通常用于取消操作,背景色为浅色

动态更新内容

弹窗打开后,可以动态更新标题和内容。

更新标题

const modal = new Modal({
    title: '加载中...',
    content: '正在加载数据...'
});

modal.open();

// 模拟异步操作
setTimeout(() => {
    modal.setTitle('加载完成');
}, 2000);

setTitle() 方法会更新弹窗的标题。

更新内容

modal.setContent('新的内容');

setContent() 方法会更新弹窗的内容。这对于异步加载数据的场景很有用。


自定义选项

弹窗支持丰富的自定义选项。

宽度

const modal = new Modal({
    title: '标题',
    content: '内容',
    width: '600px'  // 自定义宽度
});

modal.open();

默认宽度是 400px,可以根据需要调整。

遮罩

const modal = new Modal({
    title: '标题',
    content: '内容',
    showMask: false  // 不显示遮罩
});

modal.open();

showMask 控制是否显示遮罩。默认显示。

点击遮罩关闭

const modal = new Modal({
    title: '标题',
    content: '内容',
    closeOnMask: false  // 点击遮罩不关闭
});

modal.open();

closeOnMask 控制点击遮罩是否关闭弹窗。默认关闭。

动画

const modal = new Modal({
    title: '标题',
    content: '内容',
    animation: false  // 禁用动画
});

modal.open();

animation 控制是否启用动画效果。默认启用。


回调函数

弹窗支持确认和取消的回调函数。

确认回调

const modal = new Modal({
    title: '确认',
    content: '确定要继续吗?',
    type: 'confirm',
    onConfirm: () => {
        console.log('用户点击了确定');
    }
});

modal.open();

onConfirm 会在用户点击确定按钮时调用。

取消回调

const modal = new Modal({
    title: '确认',
    content: '确定要继续吗?',
    type: 'confirm',
    onCancel: () => {
        console.log('用户点击了取消');
    }
});

modal.open();

onCancel 会在用户点击取消按钮时调用。


实现原理

遮罩和弹窗

// 创建遮罩
this.mask = document.createElement('div');
this.mask.className = 'modal-mask';
document.body.appendChild(this.mask);

// 创建弹窗
this.modal = document.createElement('div');
this.modal.className = 'modal';
document.body.appendChild(this.modal);

弹窗由两部分组成:遮罩和弹窗容器。遮罩是一个半透明的背景,弹窗容器是实际的弹窗。

动画效果

// 显示时添加动画类
this.modal.classList.add('modal-show');

// CSS 中定义动画
@keyframes modalPopIn {
    from {
        opacity: 0;
        transform: translate(-50%, -50%) scale(0.9);
    }
    to {
        opacity: 1;
        transform: translate(-50%, -50%) scale(1);
    }
}

弹窗使用 CSS 动画实现弹出效果。从小到大,从透明到不透明,给用户一个流畅的视觉体验。

事件处理

// 绑定按钮事件
this.modal.querySelectorAll('.modal-footer .btn').forEach((btn, index) => {
    btn.addEventListener('click', (e) => {
        // 处理点击事件
    });
});

弹窗会自动绑定所有按钮的点击事件,并调用对应的回调函数。



总结

v1.2.0 弹窗组件完成了用户交互的功能。结合 v1.0.0 的数据表格和 v1.1.0 的图表库,现在我们有了完整的数据展示和交互解决方案。

弹窗组件的设计也很简洁。支持多种类型,提供快捷方法,还能自定义按钮和选项。这就是"开箱即用"的理念。

后续版本会继续添加更多组件。下一个是日期选择器,再后面还有下拉菜单、文件上传等等。每个组件都会遵循同样的设计理念:简洁、高效、易用。

https://gitcode.com/nutpi/openHarmony_Cordova_NutpiDesign

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值