(#36) Add popuplayer.

This commit is contained in:
MrKBear 2022-01-23 20:34:52 +08:00
parent a5dc26cd17
commit 943798f53c
3 changed files with 133 additions and 2 deletions

View File

View File

@ -0,0 +1,130 @@
import { Modular, Manager } from "../core/Module";
/**
*
*/
class DisplayLayer {
/**
* Layer 使 key
*/
public key: string = "";
/**
* 使
*/
public animateTime: number = 300;
/**
*
*/
public isDisplay: boolean = false;
/**
*
*/
public isShow: boolean = false;
/**
*
*/
public disappearTimer?: number;
}
/**
*
*/
type IPopupLayerEvent<L extends string> = {
/**
*
*/
clickMask: void
/**
*
*/
show: L;
/**
*
*/
hide: L;
/**
*
*/
change: Readonly<DisplayLayer>;
}
/**
*
*/
class PopupLayer<
L extends string,
M extends Manager = Manager
> extends Modular<M, {}, IPopupLayerEvent<L>> {
/**
*
*/
private layers: Map<L, DisplayLayer> = new Map();
public onLoad(): void {
this.on("show", this.handleShowLayer);
this.on("hide", this.handleHideLayer);
}
/**
*
*/
private getDisplayLayer<K extends L>(e: K): DisplayLayer {
let displayLayer = this.layers.get(e);
if (!displayLayer) {
displayLayer = new DisplayLayer();
displayLayer.key = e;
this.layers.set(e, displayLayer);
}
return displayLayer;
}
/**
*
*/
private handleShowLayer = <K extends L>(e: K) => {
let displayLayer = this.getDisplayLayer(e);
// 取消消失定时
displayLayer.disappearTimer &&
clearTimeout(displayLayer.disappearTimer);
this.setData({
[`${ e }$isShow`]: true,
[`${ e }$isDisplay`]: true
});
this.emit("change", displayLayer);
};
/**
*
*/
private handleHideLayer = <K extends L>(e: K) => {
let displayLayer = this.getDisplayLayer(e);
this.setData({
[`${ e }$isShow`]: false
});
displayLayer.disappearTimer = setTimeout(() => {
this.setData({
[`${ e }$isDisplay`]: false
});
}, displayLayer.animateTime);
this.emit("change", displayLayer);
}
}
export { PopupLayer };
export default PopupLayer;

View File

@ -2,7 +2,7 @@ import { Manager } from "../../core/Module";
import { UserCard } from "./UserCard";
import { MainFunction } from "./MainFunction";
import { FunctionList } from "./FunctionList";
import { Mask } from "../../modular/Mask/Mask";
import { PopupLayer } from "../../modular/PopupLayer";
(async () => {
@ -10,7 +10,8 @@ import { Mask } from "../../modular/Mask/Mask";
const { manager, query } = await Manager.PageAsync();
// 添加蒙版 Modular
// const mask = manager.addModule(Mask, "mask");
const popupLayer: PopupLayer<"a" | "b"> = manager.addModule(PopupLayer, "mask") as any;
popupLayer.emit("show", "a");
// 添加 UserCard Modular
manager.addModule(UserCard, "userCard");