jikemp_weapp/app/model/header.model.ts
2025-11-05 15:59:53 +08:00

54 lines
1.4 KiB
TypeScript

import Taro from "@tarojs/taro";
import { atom, selector } from "recoil";
export interface HeaderModel {
safeAreaBottom: number;
statusBar: number;
customBar: number;
capsulePadding: number;
capsuleWidth: number;
capsuleHeight: number;
capsuleBottom: number;
}
const handleSelector = selector<HeaderModel>({
key: "handleSelector",
get: async () => {
try {
const result = await Taro.getSystemInfo();
let windowsWidth = result.windowWidth;
const rect = Taro.getMenuButtonBoundingClientRect();
let customBar =
(rect.top - (result.statusBarHeight as number)) * 2 + rect.height;
let safeAreaBottom =
result.screenHeight != result.safeArea?.bottom
? result.screenHeight - (result.safeArea?.bottom as number)
: 0;
return {
safeAreaBottom: safeAreaBottom,
statusBar: result.statusBarHeight ?? 0,
customBar: customBar,
capsulePadding: windowsWidth - rect.right,
capsuleWidth: rect.width,
capsuleHeight: rect.height,
capsuleBottom: customBar - rect.bottom,
};
} catch (error) {
return {
safeAreaBottom: 0,
statusBar: 0,
customBar: 0,
capsulePadding: 0,
capsuleWidth: 0,
capsuleHeight: 0,
capsuleBottom: 0,
};
}
},
});
export const headerModel = atom<HeaderModel>({
key: "headerModel",
default: handleSelector,
});