UNPKG

taro-ui-vue3

Version:

Taro UI Rewritten in Vue 3.0

208 lines (207 loc) 5.27 kB
import Taro from "@tarojs/taro"; const {getEnv, ENV_TYPE} = Taro; const ENV = Taro.getEnv(); const getEnvs = () => { const env = getEnv(); return { isWEAPP: env === ENV_TYPE.WEAPP, isALIPAY: env === ENV_TYPE.ALIPAY, isWEB: env === ENV_TYPE.WEB }; }; function pxTransform(size, designWidth) { if (!size) return ""; if (!designWidth) { designWidth = 750; } return Taro.pxTransform(size, designWidth); } function delay(delayTime = 500) { return new Promise((resolve) => { setTimeout(() => { resolve(); }, delayTime); }); } function delayQuerySelector(_, selectorStr, delayTime = 500) { false; const selector = Taro.createSelectorQuery(); return new Promise((resolve) => { delay(delayTime).then(() => { selector.select(selectorStr).boundingClientRect().exec((res) => { resolve(res); }); }); }); } const objectToString = (style) => { if (style && typeof style === "object") { let styleStr = ""; Object.keys(style).forEach((key) => { const lowerCaseKey = key.replace(/([A-Z])/g, "-$1").toLowerCase(); styleStr += `${lowerCaseKey}:${style[key]};`; }); return styleStr; } else if (style && typeof style === "string") { return style; } return ""; }; function mergeStyle(style1, style2) { if (style1 && typeof style1 === "object" && style2 && typeof style2 === "object") { return Object.assign({}, style1, style2); } return objectToString(style1) + objectToString(style2); } let scrollTop = 0; function handleTouchScroll(flag) { if (ENV !== Taro.ENV_TYPE.WEB) { return; } if (flag) { scrollTop = document.documentElement.scrollTop; document.body.classList.add("at-frozen"); document.body.style.top = `${-scrollTop}px`; } else { document.body.style.top = ""; document.body.classList.remove("at-frozen"); document.documentElement.scrollTop = scrollTop; } } function uuid(len = 8, radix = 16) { const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""); const value = []; let i = 0; radix = radix || chars.length; if (len) { for (i = 0; i < len; i++) value[i] = chars[0 | Math.random() * radix]; } else { let r; value[8] = value[13] = value[18] = value[23] = "-"; value[14] = "4"; for (i = 0; i < 36; i++) { if (!value[i]) { r = 0 | Math.random() * 16; value[i] = chars[i === 19 ? r & 3 | 8 : r]; } } } return value.join(""); } function isTest() { return false; } function getEventDetail(event) { let detail; switch (ENV) { case Taro.ENV_TYPE.WEB: detail = { pageX: event.pageX, pageY: event.pageY, clientX: event.clientX, clientY: event.clientY, offsetX: event.offsetX, offsetY: event.offsetY, x: event.x, y: event.y }; break; case Taro.ENV_TYPE.WEAPP: detail = { pageX: event.touches[0].pageX, pageY: event.touches[0].pageY, clientX: event.touches[0].clientX, clientY: event.touches[0].clientY, offsetX: event.target.offsetLeft, offsetY: event.target.offsetTop, x: event.target.x, y: event.target.y }; break; case Taro.ENV_TYPE.ALIPAY: detail = { pageX: event.target.pageX, pageY: event.target.pageY, clientX: event.target.clientX, clientY: event.target.clientY, offsetX: event.target.offsetLeft, offsetY: event.target.offsetTop, x: event.target.x, y: event.target.y }; break; case Taro.ENV_TYPE.SWAN: detail = { pageX: event.changedTouches[0].pageX, pageY: event.changedTouches[0].pageY, clientX: event.target.clientX, clientY: event.target.clientY, offsetX: event.target.offsetLeft, offsetY: event.target.offsetTop, x: event.detail.x, y: event.detail.y }; break; default: detail = { pageX: 0, pageY: 0, clientX: 0, clientY: 0, offsetX: 0, offsetY: 0, x: 0, y: 0 }; console.warn("getEventDetail\u6682\u672A\u652F\u6301\u8BE5\u73AF\u5883"); break; } return detail; } function delayGetScrollOffset({delayTime = 500}) { return new Promise((resolve) => { delay(delayTime).then(() => { Taro.createSelectorQuery().selectViewport().scrollOffset().exec((res) => { resolve(res); }); }); }); } function delayGetClientRect({selectorStr, delayTime = 500}) { const selector = Taro.createSelectorQuery(); return new Promise((resolve) => { delay(delayTime).then(() => { selector.select(selectorStr).boundingClientRect().exec((res) => { resolve(res); }); }); }); } function convertToUnit(str, unit = "px") { if (str == null || str === "") { return void 0; } else if (isNaN(+str)) { return String(str); } else { return `${Number(str)}${unit}`; } } function keys(o) { return Object.keys(o); } export { convertToUnit, delayGetClientRect, delayGetScrollOffset, delayQuerySelector, getEnvs, getEventDetail, handleTouchScroll, isTest, keys, mergeStyle, pxTransform, uuid };