useSizeAdapt.js 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. // 用法:
  2. // width: calc(950 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  3. import { onBeforeUnmount, ref } from 'vue'
  4. import { userAgentInfo } from '@/store/non-reactive.js'
  5. export default function useSizeAdapt(windowWidthWhenDesign = 1920, windowHeightWhenDesign = 1080) {
  6. const windowSizeInCssForRef = ref('')
  7. const windowSizeWhenDesignForRef = ref('')
  8. function compute() {
  9. if (window.innerWidth / window.innerHeight > windowWidthWhenDesign / windowHeightWhenDesign) {
  10. windowSizeWhenDesignForRef.value = windowHeightWhenDesign
  11. windowSizeInCssForRef.value = window.innerHeight + 'px' // 用100vh的话在移动端会有兼容性问题。
  12. } else {
  13. windowSizeWhenDesignForRef.value = windowWidthWhenDesign
  14. windowSizeInCssForRef.value = '100vw'
  15. }
  16. }
  17. compute()
  18. if (userAgentInfo.device.type !== 'mobile' || userAgentInfo.os.name === 'iOS') {
  19. window.addEventListener('resize', compute)
  20. onBeforeUnmount(() => {
  21. window.removeEventListener('resize', compute)
  22. })
  23. }
  24. return {
  25. windowSizeInCssForRef,
  26. windowSizeWhenDesignForRef,
  27. }
  28. }