useMediaQuery.js 696 B

1234567891011121314151617181920212223242526
  1. import { ref, onBeforeUnmount, onMounted } from 'vue';
  2. const MOBILE_BREAKPOINT_PX = 768;
  3. // Vue 3 replacement for the legacy MediaQueryMixin. Returns a reactive
  4. // `isMobile` ref that updates on window resize. Use inside <script setup>:
  5. //
  6. // const { isMobile } = useMediaQuery();
  7. export function useMediaQuery(breakpoint = MOBILE_BREAKPOINT_PX) {
  8. const compute = () => window.innerWidth <= breakpoint;
  9. const isMobile = ref(compute());
  10. const onResize = () => {
  11. isMobile.value = compute();
  12. };
  13. onMounted(() => {
  14. window.addEventListener('resize', onResize);
  15. });
  16. onBeforeUnmount(() => {
  17. window.removeEventListener('resize', onResize);
  18. });
  19. return { isMobile };
  20. }