taro-ui-vue3
Version:
Taro UI Rewritten in Vue 3.0
208 lines (207 loc) • 5.27 kB
JavaScript
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
};