@antmjs/vantui
Version:
一套适用于Taro3及React的vantui组件库
225 lines (222 loc) • 7 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.delay = delay;
exports.delayQuerySelector = delayQuerySelector;
exports.getRootScrollTop = getRootScrollTop;
exports.mergeStyle = mergeStyle;
exports.parse = parse;
exports.pxTransform = pxTransform;
exports.resizeTextarea = resizeTextarea;
exports.setRootScrollTop = setRootScrollTop;
exports.setScrollTop = setScrollTop;
exports.useFadeIn = useFadeIn;
exports.useFadeOut = useFadeOut;
exports.useMask = useMask;
exports.uuid = uuid;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _taro = require("@tarojs/taro");
var _type = require("./type");
function parse(str) {
var decode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var params = {};
if (!(0, _type.isString)(str)) {
return params;
}
var trimStr = str.trim();
if (trimStr === '') {
return params;
}
var newStr = trimStr.split('&');
for (var i = 0; i < newStr.length; i++) {
var _split = newStr[i].split('='),
_split2 = (0, _slicedToArray2.default)(_split, 2),
key = _split2[0],
value = _split2[1];
if (decode) {
var kkey = decodeURIComponent(key);
var vvalue = decodeURIComponent(value);
if ((0, _type.isString)(vvalue)) {
try {
params[kkey] = JSON.parse(vvalue);
if ((0, _type.isNumber)(params[kkey]) && params[kkey] + '' !== vvalue + '') {
params[kkey] = vvalue;
}
} catch (error) {
params[kkey] = vvalue;
}
} else {
params[kkey] = vvalue;
}
} else {
params[key] = value;
}
}
return params;
}
function useFadeIn(ref) {
return (0, _react.useCallback)(function () {
if (ref.current) {
ref.current.style.cssText = 'display: block;opacity: 0';
}
(0, _taro.nextTick)(function () {
if (ref.current) {
ref.current.style.cssText = 'transition: opacity .2s linear;opacity: 1;display: block;';
}
});
}, [ref]);
}
function useFadeOut(ref) {
return (0, _react.useCallback)(function () {
if (ref.current) {
ref.current.style.cssText = 'transition: opacity .2s linear;opacity: 0;display: block;';
}
setTimeout(function () {
if (ref.current) {
ref.current.style.cssText = 'display: none;opacity: 0;';
}
}, 200);
}, [ref]);
}
function useMask(ref) {
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isShowMask = _useState2[0],
setIsShowMask = _useState2[1];
var maskRef = (0, _react.useRef)();
var maskfadeOut = useFadeOut(maskRef);
var maskfadeIn = useFadeIn(maskRef);
var actionRef = (0, _react.useRef)({
show: function show() {
setIsShowMask(true);
maskfadeIn();
},
hide: function hide() {
setIsShowMask(false);
maskfadeOut();
}
});
ref.current = actionRef.current;
return {
maskRef: maskRef,
isShowMask: isShowMask
};
}
function delay() {
var delayTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 25;
return new Promise(function (resolve) {
setTimeout(function () {
resolve();
}, delayTime);
});
}
function delayQuerySelector(selectorStr) {
var delayTime = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
return new Promise(function (resolve) {
var selector = (0, _taro.createSelectorQuery)();
delay(delayTime).then(function () {
selector.select(selectorStr).boundingClientRect().exec(function (res) {
resolve(res);
});
});
});
}
function pxTransform(size) {
if (!size) return '';
var designWidth = 750;
var deviceRatio = {
640: 2.34 / 2,
750: 1,
828: 1.81 / 2
};
return "".concat(size / deviceRatio[designWidth], "rpx");
}
function objectToString(style) {
if (style && (0, _typeof2.default)(style) === 'object') {
var styleStr = '';
Object.keys(style).forEach(function (key) {
var _key$replace;
var lowerCaseKey = (_key$replace = key.replace(/([A-Z])/g, '-$1')) === null || _key$replace === void 0 ? void 0 : _key$replace.toLowerCase();
styleStr += "".concat(lowerCaseKey, ":").concat(style[key], ";");
});
return styleStr;
} else if (style && typeof style === 'string') {
return style;
}
return '';
}
function mergeStyle(style1, style2) {
if (style1 && (0, _typeof2.default)(style1) === 'object' && style2 && (0, _typeof2.default)(style2) === 'object') {
return Object.assign({}, style1, style2);
}
return objectToString(style1) + objectToString(style2);
}
function uuid() {
var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8;
var radix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
var value = [];
var 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
var 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 getRootScrollTop() {
return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
}
function setRootScrollTop(value) {
setScrollTop(window, value);
setScrollTop(document.body, value);
}
function setScrollTop(el, value) {
if ('scrollTop' in el) {
el.scrollTop = value;
} else {
el.scrollTo(el.scrollX, value);
}
}
function resizeTextarea(input, autosize) {
var scrollTop = getRootScrollTop();
input.style.height = 'auto';
input.style.lineHeight = 'inherit';
input.rows = 1;
var height = input.scrollHeight;
console.info(height);
if ((0, _type.isObject)(autosize)) {
var maxHeight = autosize.maxHeight,
minHeight = autosize.minHeight;
if (maxHeight !== undefined) {
height = Math.min(height, typeof maxHeight === 'number' ? maxHeight : Number(maxHeight.replace('px', '')));
}
if (minHeight !== undefined) {
height = Math.max(height, typeof minHeight === 'number' ? minHeight : Number(minHeight.replace('px', '')));
}
}
if (height) {
input.style.height = "".concat(height, "px");
// https://github.com/youzan/vant/issues/9178
setRootScrollTop(scrollTop);
}
}