unit.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * 将rpx转换为px
  3. * @param rpx - 输入值
  4. * @returns number - 返回对应的px值
  5. */
  6. export const rpx2px = (rpx: number): number => {
  7. let px: number;
  8. // #ifdef MP
  9. px = rpx / (750 / uni.getWindowInfo().windowWidth);
  10. // #endif
  11. // #ifndef MP
  12. px = uni.rpx2px(rpx);
  13. // #endif
  14. return px;
  15. };
  16. /**
  17. * 将px转换为rpx
  18. * @param px - 输入值
  19. * @returns number - 返回对应的rpx值
  20. */
  21. export const px2rpx = (px: number): number => {
  22. return px / rpx2px(1);
  23. };
  24. /**
  25. * 将数值或字符串转换为对应的单位
  26. * @param val - 输入值,例如 10、"10rpx"、"10px"
  27. * @returns string - 返回对应的单位
  28. */
  29. export const getUnit = (val: string | number | null): string | null => {
  30. if (val != null) {
  31. if (typeof val == "string") {
  32. const num = parseFloat(val);
  33. const unit = val.replace(`${num}`, "");
  34. if (unit == "rpx") {
  35. return `${rpx2px(num)}px`;
  36. } else if (unit == "%") {
  37. return `${num}%`;
  38. } else {
  39. return `${num}px`;
  40. }
  41. } else {
  42. return `${val}px`;
  43. }
  44. }
  45. return null;
  46. };
  47. /**
  48. * 示例: 获取数值部分
  49. * @example
  50. * getNum("10rpx") // 返回 10
  51. * getNum("10px") // 返回 10
  52. * getNum("10") // 返回 10
  53. * getNum("-5.5px") // 返回 -5.5
  54. * @param val - 输入值,例如 "10rpx"、"10px"、"10"
  55. * @returns number - 返回提取的数值
  56. */
  57. export const getNum = (val: string): number => {
  58. // 使用正则提取数字部分,支持小数和负数
  59. const match = val.match(/-?\d+(\.\d+)?/);
  60. return match != null ? parseFloat(match[0] ?? "0") : 0;
  61. };