UNPKG

rtaro-ui

Version:
214 lines 7.04 kB
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