# vue-pups
**Repository Path**: euzen/vue-pups
## Basic Information
- **Project Name**: vue-pups
- **Description**: vue3函数式弹窗库,组件式开发、函数式调用,让弹窗摆脱 Template/v-show/v-if 的限制,实现更加灵活可控的弹窗流程控制。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-09-24
- **Last Updated**: 2022-06-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vue-pups 文档
> 实用的应用级弹窗开发工具
- 组件式开发,函数式调用
- 让弹窗摆脱 Template/v-show/v-if 的限制
- 异步函数回调,实现更加灵活可控的弹窗流程控制
## 简单上手
**安装**
```shell
npm install vue-pups
```
**引入**
```ts
import { VPups } from 'vue-pups'
import 'vue-pups/dist/style.css'
```
**开发弹窗组件**
```vue
# @/popups/instances/Popup1.vue
```
**实例化并挂载组件**
```ts
// @/popups/index.ts
import Popup1 from '@/popups/instances/Popup1.vue'
const vPups = new VPups({
Popup1,
})
export { vPups }
```
**在页面中使用**
```vue
# @/views/Home.vue
```
## API
### VPups
**类型**
```ts
declare class VPups> {
/**
* 构造函数
* @param instances 弹窗实例集对象
* @param id 弹窗 root元素的 id,一般用于需要创建多个 VPups 实例时使用,默认为 vue-poups
*/
constructor(instances: T, id?: string);
/** 弹窗状态切换监听器 */
readonly toggleListener: {
/** 任意弹窗被唤起时,此函数将被调用,可被覆写。默认函数设置了窗口不可滚动 */
onShow(): void;
/** 任意弹窗被关闭时,此函数将被调用,可被覆写。默认函数恢复了窗口滚动 */
onHide(): void;
/** 当 style.zIndex 被修改时,此函数将被调用,可被覆写。默认为空函数 */
onDepthSet(zIndex: number): void;
}
readonly style: {
// 设置弹窗层级
// 当存在别的组件与本组件默认的 z-index 冲突时,可通过设置此属性进行修改
get zIndex(): number;
set zIndex(zIndex: number);
// 设置遮罩层的可点击性,设置为 false,则不能通过点击遮罩关闭弹窗
// 当需要阻止用户通过点击遮罩层关闭弹窗时,可通过设置此属性进行修改
// 针对单个弹窗的需求,可以在对应弹窗组件的 onMounted 和 onUnmounted 生命周期函数中进行切换
get clickable(): boolean;
set clickable(clickable: boolean);
// vue 内置组件 transition 的过渡类名
// 内置了三种形式的过渡动画,弹跳/缩放/淡出淡入,
// 亦可使用自定义的过渡类名,自定义默认类名不可内置于 scoped 组件样式中
get transitionName(): 'vp-bounce' | 'vp-scale' | 'vp-fade' | string;
set transitionName(name: 'vp-bounce' | 'vp-scale' | 'vp-fade' | string);
// 弹窗盒子(.vue_poups_box)的内联样式
get boxStyle(): Record;
set boxStyle(style: Record);
};
/**
* 弹出某个实例弹窗
* @param name 实例弹窗名
* @param props 实例弹窗属性, 作用于 vue 组件的 props
*/
show(name: keyof T, props?: Record): Promise;
/**
* 清除所有实例弹窗
* 不会执行过渡动画,所有弹窗将直接消失
*/
clear(): void;
/**
* 挂载插件, 同 vue 的 createApp().use
* vue-pups 实际上是创建一个平行于主程序的 vue app,因此,同样可以使用跟主程序一样的方式进行插件挂载
* 如果你的弹窗需要用到跟主程序一样的第三方库/路由/vuex,则可以通过此方法进行挂载
*/
use(plugin: Plugin, ...options: any[]): App;
}
```
### 事件
vue-pups 监听了来自弹窗组件的 `close`事件,你可以在编写的弹窗实例中,触发`close`事件以关闭弹窗,同时传递回调参数,以供后续判断。
具体例子,可参考上方**简单上手**一节中,关于**开发弹窗组件**一目。
## 兼容性
1. vue-pups 源码使用了部分 es6 高阶 API,如果你的程序与之不兼容,可以拉取源码,并将 vite.config.ts 中 @babel/plugin-transform-runtime 部分的注释打开,此后自行编译即可。此操作将增加包的体积。
2. 或者在你自己的程序中,引入对应 polyfill 进行兼容。一般5/6年内的手机都没问题,就怕超级钉子户。
3. 注意:本程序只兼容了vue3版本,请不要在vue2版本的程序中使用
## 仓库
[gitee](https://gitee.com/euzen/vue-pups)
[github](https://github.com/iEuJen/vue-pups)
## 更新日志
- 0.0.2
- 修复 vite 将 rgba() 编译成 \#RGBA 的问题
- 0.0.1
- 发布