1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import { ref, computed, ComputedRef, unref } from 'vue';
- import { useEventListener } from '/@/hooks/event/useEventListener';
- import { screenMap, sizeEnum, screenEnum } from '/@/enums/breakpointEnum';
- let globalScreenRef: ComputedRef<sizeEnum | undefined>;
- let globalWidthRef: ComputedRef<number>;
- let globalRealWidthRef: ComputedRef<number>;
- export function useBreakpoint() {
- return {
- screenRef: computed(() => unref(globalScreenRef)),
- widthRef: globalWidthRef,
- screenEnum,
- realWidthRef: globalRealWidthRef,
- };
- }
- // Just call it once
- export function createBreakpointListen(fn?: Fn) {
- const screenRef = ref<sizeEnum>(sizeEnum.XL);
- const realWidthRef = ref(window.innerWidth);
- function getWindowWidth() {
- const width = document.body.clientWidth;
- const xs = screenMap.get(sizeEnum.XS)!;
- const sm = screenMap.get(sizeEnum.SM)!;
- const md = screenMap.get(sizeEnum.MD)!;
- const lg = screenMap.get(sizeEnum.LG)!;
- const xl = screenMap.get(sizeEnum.XL)!;
- if (width < xs) {
- screenRef.value = sizeEnum.XS;
- } else if (width < sm) {
- screenRef.value = sizeEnum.SM;
- } else if (width < md) {
- screenRef.value = sizeEnum.MD;
- } else if (width < lg) {
- screenRef.value = sizeEnum.LG;
- } else if (width < xl) {
- screenRef.value = sizeEnum.XL;
- } else {
- screenRef.value = sizeEnum.XXL;
- }
- realWidthRef.value = width;
- }
- useEventListener({
- el: window,
- name: 'resize',
- listener: () => {
- fn && fn();
- getWindowWidth();
- },
- });
- getWindowWidth();
- globalScreenRef = computed(() => unref(screenRef));
- globalWidthRef = computed((): number => screenMap.get(unref(screenRef)!)!);
- globalRealWidthRef = computed((): number => unref(realWidthRef));
- return {
- screenRef: globalScreenRef,
- screenEnum,
- widthRef: globalWidthRef,
- realWidthRef: globalRealWidthRef,
- };
- }
|