@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
59 lines (58 loc) • 2.13 kB
JavaScript
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
import { createSelectorQuery } from "@tarojs/taro";
import MiniLru from "./lru";
import { getRect, inBrowser } from "../hooks/use-client-rect";
var lru = new MiniLru(10);
export function makeRect(width, height) {
return {
top: 0,
left: 0,
right: width,
bottom: height,
width: width,
height: height
};
}
export var getRectByTaro = /*#__PURE__*/ function() {
var _ref = _async_to_generator(function(element) {
var harmonyId;
var _arguments = arguments;
return _ts_generator(this, function(_state) {
harmonyId = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : '';
if (element) {
if (inBrowser) {
return [
2,
Promise.resolve(getRect(element))
];
}
// 小程序下的逻辑
return [
2,
new Promise(function(resolve, reject) {
if (lru.has(element)) {
resolve(lru.get(element));
return;
}
createSelectorQuery().select("#".concat(harmonyId || element.uid)).boundingClientRect().exec(function(param) {
var _param = _sliced_to_array(param, 1), rects = _param[0];
if (rects) {
lru.set(element, rects);
}
resolve(rects);
});
})
];
}
return [
2,
Promise.resolve(makeRect(0, 0))
];
});
});
return function getRectByTaro(element) {
return _ref.apply(this, arguments);
};
}();