UNPKG

ukelli-ui

Version:

Base on React's UI lib. Make frontend's dev simpler and faster.

72 lines (71 loc) 3.42 kB
/* 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 }; }