utils.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { isDef, isNumber, isPlainObject, isPromise } from './validator';
  2. import { canIUseGroupSetData, canIUseNextTick } from './version';
  3. export { isDef } from './validator';
  4. export function range(num, min, max) {
  5. return Math.min(Math.max(num, min), max);
  6. }
  7. export function nextTick(cb) {
  8. if (canIUseNextTick()) {
  9. wx.nextTick(cb);
  10. } else {
  11. setTimeout(() => {
  12. cb();
  13. }, 1000 / 30);
  14. }
  15. }
  16. let systemInfo;
  17. export function getSystemInfoSync() {
  18. if (systemInfo == null) {
  19. systemInfo = wx.getSystemInfoSync();
  20. }
  21. return systemInfo;
  22. }
  23. export function addUnit(value) {
  24. if (!isDef(value)) {
  25. return undefined;
  26. }
  27. value = String(value);
  28. return isNumber(value) ? `${value}px` : value;
  29. }
  30. export function requestAnimationFrame(cb) {
  31. const systemInfo = getSystemInfoSync();
  32. if (systemInfo.platform === 'devtools') {
  33. return setTimeout(() => {
  34. cb();
  35. }, 1000 / 30);
  36. }
  37. return wx
  38. .createSelectorQuery()
  39. .selectViewport()
  40. .boundingClientRect()
  41. .exec(() => {
  42. cb();
  43. });
  44. }
  45. export function pickExclude(obj, keys) {
  46. if (!isPlainObject(obj)) {
  47. return {};
  48. }
  49. return Object.keys(obj).reduce((prev, key) => {
  50. if (!keys.includes(key)) {
  51. prev[key] = obj[key];
  52. }
  53. return prev;
  54. }, {});
  55. }
  56. export function getRect(context, selector) {
  57. return new Promise((resolve) => {
  58. wx.createSelectorQuery()
  59. .in(context)
  60. .select(selector)
  61. .boundingClientRect()
  62. .exec((rect = []) => resolve(rect[0]));
  63. });
  64. }
  65. export function getAllRect(context, selector) {
  66. return new Promise((resolve) => {
  67. wx.createSelectorQuery()
  68. .in(context)
  69. .selectAll(selector)
  70. .boundingClientRect()
  71. .exec((rect = []) => resolve(rect[0]));
  72. });
  73. }
  74. export function groupSetData(context, cb) {
  75. if (canIUseGroupSetData()) {
  76. context.groupSetData(cb);
  77. } else {
  78. cb();
  79. }
  80. }
  81. export function toPromise(promiseLike) {
  82. if (isPromise(promiseLike)) {
  83. return promiseLike;
  84. }
  85. return Promise.resolve(promiseLike);
  86. }
  87. export function getCurrentPage() {
  88. const pages = getCurrentPages();
  89. return pages[pages.length - 1];
  90. }