ukelli-ui
Version:
ukelli-ui 是基于 React 的 UI 库,提供简约和功能齐全的组件,可高度定制的组件接口,灵活的配置,提供给开发者另一种开发思路,也致力于尝试不同的组件使用和开发方向。
68 lines (57 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getLeft = getLeft;
exports.getRight = getRight;
exports.getTop = getTop;
exports.getBottom = getBottom;
var _utils = require("../utils");
var ScreenWidth = (0, _utils.getScreenWidth)();
var ScreenHeight = (0, _utils.getScreenHeight)();
var verticalOffset = 14;
var horizontalOffset = 4;
window.onresize = function () {
ScreenWidth = (0, _utils.getScreenWidth)();
ScreenHeight = (0, _utils.getScreenHeight)();
};
/**
* 计算最终的 top 和 left,并且根据浏览器可视边界判断最终结果
*/
function getLeft(offsetTop, offsetLeft, offsetWidth, offsetHeight, elemWidth, elemHeight) {
var fromRight = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
var left = offsetLeft - elemWidth - 12;
if (left - elemWidth <= 0 && !fromRight) return getRight.apply(void 0, arguments); // if(left + elemWidth > ScreenWidth) left = ScreenWidth - elemWidth;
return {
top: offsetTop - horizontalOffset,
position: 'left',
left: left
};
}
function getRight(offsetTop, offsetLeft, offsetWidth, offsetHeight, elemWidth, elemHeight) {
var left = offsetLeft + offsetWidth + 15;
if (left + elemWidth >= ScreenWidth) return getLeft.apply(void 0, Array.prototype.slice.call(arguments).concat([true])); // if(left - elemWidth <= 0) left = ScreenWidth - elemWidth;
return {
top: offsetTop - horizontalOffset,
position: 'right',
left: left
};
}
function getTop(offsetTop, offsetLeft, offsetWidth, offsetHeight, elemWidth, elemHeight) {
var top = offsetTop - elemHeight - offsetHeight / 2;
if (top - elemHeight <= 0) return getBottom.apply(void 0, arguments);
return {
top: top,
position: 'top',
left: offsetLeft - verticalOffset
};
}
function getBottom(offsetTop, offsetLeft, offsetWidth, offsetHeight, elemWidth, elemHeight) {
var top = offsetTop + offsetHeight + offsetHeight / 2;
if (top + elemHeight >= ScreenHeight) return getTop.apply(void 0, arguments);
return {
top: top,
position: 'bottom',
left: offsetLeft - verticalOffset
};
}