unit.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.addUnit = addUnit;
  4. exports.unitToPx = unitToPx;
  5. var _ = require("..");
  6. var _number = require("../validate/number");
  7. function addUnit(value) {
  8. if (!(0, _.isDef)(value)) {
  9. return undefined;
  10. }
  11. value = String(value);
  12. return (0, _number.isNumeric)(value) ? value + "px" : value;
  13. } // cache
  14. var rootFontSize;
  15. function getRootFontSize() {
  16. if (!rootFontSize) {
  17. var doc = document.documentElement;
  18. var fontSize = doc.style.fontSize || window.getComputedStyle(doc).fontSize;
  19. rootFontSize = parseFloat(fontSize);
  20. }
  21. return rootFontSize;
  22. }
  23. function convertRem(value) {
  24. value = value.replace(/rem/g, '');
  25. return +value * getRootFontSize();
  26. }
  27. function convertVw(value) {
  28. value = value.replace(/vw/g, '');
  29. return +value * window.innerWidth / 100;
  30. }
  31. function convertVh(value) {
  32. value = value.replace(/vh/g, '');
  33. return +value * window.innerHeight / 100;
  34. }
  35. function unitToPx(value) {
  36. if (typeof value === 'number') {
  37. return value;
  38. }
  39. if (_.inBrowser) {
  40. if (value.indexOf('rem') !== -1) {
  41. return convertRem(value);
  42. }
  43. if (value.indexOf('vw') !== -1) {
  44. return convertVw(value);
  45. }
  46. if (value.indexOf('vh') !== -1) {
  47. return convertVh(value);
  48. }
  49. }
  50. return parseFloat(value);
  51. }