others.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { toTypeString } from '@vue/shared'
  2. export const toRawType = (value: any) => toTypeString(value).slice(8, -1)
  3. export const normalizeUnitToStyle: number = (unit: number | string) => {
  4. if (unit === 0) {
  5. return unit
  6. } else if (typeof unit === 'number') {
  7. return unit ? (unit <= 1 && unit >= 0 ? `${100 * unit}%` : `${unit}px`) : 0
  8. } else if (unit.includes('px')) {
  9. return normalizeUnitToStyle(Number.parseFloat(unit))
  10. } else if (unit.includes('%')) {
  11. return normalizeUnitToStyle(Number.parseFloat(unit) / 100)
  12. } else {
  13. return unit
  14. }
  15. }
  16. export const os = (function () {
  17. const ua = navigator.userAgent
  18. const isWindowsPhone = /(?:Windows Phone)/.test(ua)
  19. const isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone
  20. const isAndroid = /(?:Android)/.test(ua)
  21. const isFireFox = /(?:Firefox)/.test(ua)
  22. // const isChrome = /(?:Chrome|CriOS)/.test(ua);
  23. let isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua))
  24. const isPhone = /(?:iPhone)/.test(ua) && !isTablet
  25. const isPc = !isPhone && !isAndroid && !isSymbian
  26. if (isPc && navigator.maxTouchPoints > 1) {
  27. isTablet = true
  28. }
  29. return {
  30. isTablet,
  31. isPhone,
  32. isAndroid,
  33. isPc,
  34. }
  35. })()