browser.ts 540 B

123456789101112131415161718192021222324252627282930
  1. import { useEventListener } from "@vueuse/core";
  2. import { reactive, watch } from "vue";
  3. import { getBrowser } from "../utils";
  4. const browser = reactive(getBrowser());
  5. const events: (() => void)[] = [];
  6. watch(
  7. () => browser.screen,
  8. () => {
  9. events.forEach((ev) => ev());
  10. }
  11. );
  12. useEventListener(window, "resize", () => {
  13. Object.assign(browser, getBrowser());
  14. });
  15. export function useBrowser() {
  16. return {
  17. browser,
  18. onScreenChange(ev: () => void, immediate = true) {
  19. events.push(ev);
  20. if (immediate) {
  21. ev();
  22. }
  23. }
  24. };
  25. }