utils.js 1.9 KB

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