dom.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 = unit => {
  4. if (unit === void 0) {
  5. return unit
  6. } else if (toRawType(unit) === 'Number') {
  7. return unit ? ((unit <= 1) & (unit >= 0) ? 100 * unit + '%' : unit + 'px') : void 0
  8. } else if (unit.includes('px')) {
  9. return normalizeUnitToStyle(parseFloat(unit))
  10. } else if (unit.includes('%')) {
  11. return normalizeUnitToStyle(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: isTablet,
  31. isPhone: isPhone,
  32. isAndroid: isAndroid,
  33. isPc: isPc,
  34. }
  35. })()