ukelli-ui
Version:
Base on React's UI lib. Make frontend's dev simpler and faster.
72 lines (71 loc) • 3.42 kB
JavaScript
/* eslint-disable @typescript-eslint/no-use-before-define */
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { getScreenWidth, getScreenHeight } from './screen';
var horizontalOffset = 4;
// let ScreenWidth = getScreenWidth();
// let ScreenHeight = getScreenHeight();
// if (!global) {
// window.onresize = () => {
// ScreenWidth = getScreenWidth();
// ScreenHeight = getScreenHeight();
// };
// }
/**
* 计算最终的 top 和 left,并且根据浏览器可视边界判断最终结果
*/
export function getLeft(params) {
var offsetLeft = params.offsetLeft, elemWidth = params.elemWidth, offsetTop = params.offsetTop, _fromInternal = params._fromInternal, offsetWidth = params.offsetWidth, offsetHeight = params.offsetHeight, elemHeight = params.elemHeight;
var left = offsetLeft - elemWidth - 12;
if (left - elemWidth <= 0 && !_fromInternal)
return getRight(__assign(__assign({}, params), { _fromInternal: true }));
// if(left + elemWidth > ScreenWidth) left = ScreenWidth - elemWidth;
return {
top: offsetTop - horizontalOffset,
position: 'left',
left: left
};
}
export function getRight(params) {
var offsetLeft = params.offsetLeft, elemWidth = params.elemWidth, offsetTop = params.offsetTop, _fromInternal = params._fromInternal, offsetWidth = params.offsetWidth, offsetHeight = params.offsetHeight, elemHeight = params.elemHeight;
var left = offsetLeft + offsetWidth + 15;
if (left + elemWidth >= getScreenWidth() && !_fromInternal)
return getLeft(__assign(__assign({}, params), { _fromInternal: true }));
// if(left - elemWidth <= 0) left = ScreenWidth - elemWidth;
return {
top: offsetTop - horizontalOffset,
position: 'right',
left: left
};
}
export function getTop(params) {
var offsetLeft = params.offsetLeft, elemWidth = params.elemWidth, offsetTop = params.offsetTop, _fromInternal = params._fromInternal, _a = params.verticalOffset, verticalOffset = _a === void 0 ? 0 : _a, offsetWidth = params.offsetWidth, offsetHeight = params.offsetHeight, elemHeight = params.elemHeight;
var top = offsetTop - elemHeight - offsetHeight / 2;
if (top - elemHeight <= 0 && !_fromInternal)
return getBottom(__assign(__assign({}, params), { _fromInternal: true }));
return {
top: top,
position: 'top',
left: offsetLeft - verticalOffset
};
}
export function getBottom(params) {
var offsetLeft = params.offsetLeft, elemWidth = params.elemWidth, offsetTop = params.offsetTop, _fromInternal = params._fromInternal, _a = params.verticalOffset, verticalOffset = _a === void 0 ? 0 : _a, offsetWidth = params.offsetWidth, offsetHeight = params.offsetHeight, elemHeight = params.elemHeight;
var top = offsetTop + offsetHeight + offsetHeight / 2;
if (top + elemHeight >= getScreenHeight() && !_fromInternal)
return getTop(__assign(__assign({}, params), { _fromInternal: true }));
return {
top: top,
position: 'bottom',
left: offsetLeft - verticalOffset
};
}