import { isDef, isNumber, isPlainObject, isPromise } from './validator'; import { canIUseGroupSetData, canIUseNextTick, getSystemInfoSync, } from './version'; export { isDef } from './validator'; export { getSystemInfoSync } from './version'; export function range(num, min, max) { return Math.min(Math.max(num, min), max); } export function nextTick(cb) { if (canIUseNextTick()) { wx.nextTick(cb); } else { setTimeout(() => { cb(); }, 1000 / 30); } } export function addUnit(value) { if (!isDef(value)) { return undefined; } value = String(value); return isNumber(value) ? `${value}px` : value; } export function requestAnimationFrame(cb) { return setTimeout(() => { cb(); }, 1000 / 30); } export function pickExclude(obj, keys) { if (!isPlainObject(obj)) { return {}; } return Object.keys(obj).reduce((prev, key) => { if (!keys.includes(key)) { prev[key] = obj[key]; } return prev; }, {}); } export function getRect(context, selector) { return new Promise((resolve) => { wx.createSelectorQuery() .in(context) .select(selector) .boundingClientRect() .exec((rect = []) => resolve(rect[0])); }); } export function getAllRect(context, selector) { return new Promise((resolve) => { wx.createSelectorQuery() .in(context) .selectAll(selector) .boundingClientRect() .exec((rect = []) => resolve(rect[0])); }); } export function groupSetData(context, cb) { if (canIUseGroupSetData()) { context.groupSetData(cb); } else { cb(); } } export function toPromise(promiseLike) { if (isPromise(promiseLike)) { return promiseLike; } return Promise.resolve(promiseLike); } // 浮点数精度处理 export function addNumber(num1, num2) { const cardinal = Math.pow(10, 10); return Math.round((num1 + num2) * cardinal) / cardinal; } // 限制value在[min, max]之间 export const clamp = (num, min, max) => Math.min(Math.max(num, min), max); export function getCurrentPage() { const pages = getCurrentPages(); return pages[pages.length - 1]; } export const isPC = ['mac', 'windows'].includes(getSystemInfoSync().platform);