rtaro-ui
Version:
UI KIT for Taro
214 lines • 7.04 kB
JavaScript
import Taro from '@rtarojs/taro';
const ENV = Taro.getEnv();
function delay(delayTime = 25) {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, delayTime);
});
}
function delayQuerySelector(self, selectorStr, delayTime = 500) {
const $scope = process.env.TARO_ENV === 'h5' ? self : self.$scope;
const selector = Taro.createSelectorQuery().in($scope);
return new Promise(resolve => {
delay(delayTime).then(() => {
selector
.select(selectorStr)
.boundingClientRect()
.exec((res) => {
resolve(res);
});
});
});
}
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 uuid(len = 8, radix = 16) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
const value = [];
let i = 0;
radix = radix || chars.length;
if (len) {
// Compact form
for (i = 0; i < len; i++)
value[i] = chars[0 | (Math.random() * radix)];
}
else {
// rfc4122, version 4 form
let r;
// rfc4122 requires these characters
/* eslint-disable-next-line */
value[8] = value[13] = value[18] = value[23] = '-';
value[14] = '4';
// Fill in random data. At i==19 set the high bits of clock sequence as
// per rfc4122, sec. 4.1.5
for (i = 0; i < 36; i++) {
if (!value[i]) {
r = 0 | (Math.random() * 16);
value[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];
}
}
}
return value.join('');
}
function getEventDetail(event) {
let detail;
switch (process.env.TARO_ENV) {
case 'h5': {
// event.persist()
detail = {
pageX: event.nativeEvent.pageX,
pageY: event.nativeEvent.pageY,
clientX: event.nativeEvent.clientX,
clientY: event.nativeEvent.clientY,
offsetX: event.nativeEvent.offsetX,
offsetY: event.nativeEvent.offsetY,
x: event.nativeEvent.x,
y: event.nativeEvent.y
};
break;
}
case '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 '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 '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暂未支持该环境');
break;
}
return detail;
}
function initTestEnv() {
if (process.env.NODE_ENV === 'test') {
Taro.initPxTransform({ designWidth: 750 });
}
}
function isTest() {
return process.env.NODE_ENV === 'test';
}
// 是否是钉钉环境
function isDD() {
if (process.env.TARO_ENV === 'alipay' && !Taro.canIUse('optionsSelect')) {
return true;
}
return false;
}
// 是否是阿里小程序或则钉钉环境
function isAlipayOrDD() {
if (ENV === Taro.ENV_TYPE.ALIPAY || ENV === Taro.ENV_TYPE.DD) {
return true;
}
return false;
}
let scrollTop = 0;
function handleTouchScroll(flag) {
if (process.env.TARO_ENV !== 'h5') {
return;
}
if (flag) {
scrollTop = document.documentElement.scrollTop;
// 使body脱离文档流
document.body.classList.add('at-frozen');
// 把脱离文档流的body拉上去!否则页面会回到顶部!
document.body.style.top = `${-scrollTop}px`;
}
else {
document.body.style.top = '';
document.body.classList.remove('at-frozen');
document.documentElement.scrollTop = scrollTop;
}
}
function pxTransform(size) {
if (!size)
return '';
return Taro.pxTransform(size);
}
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 '';
};
const formatTime = time => {
// 如果是hls视频时,初始获取到的时长会是Infinity,会返回NaN
if (time === null || !Number.isFinite(time))
return '';
const sec = Math.round(time % 60);
const min = Math.round((time - sec) / 60);
return `${min < 10 ? `0${min}` : min}:${sec < 10 ? `0${sec}` : sec}`;
};
export { objectToString, delay, delayQuerySelector, uuid, getEventDetail, initTestEnv, isTest, isDD, isAlipayOrDD, pxTransform, handleTouchScroll, delayGetClientRect, delayGetScrollOffset, formatTime };
//# sourceMappingURL=utils.js.map