zent
Version:
一套前端设计语言和基于React的实现
70 lines (46 loc) • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getViewportSize = require('../../utils/dom/getViewportSize');
var _getViewportSize2 = _interopRequireDefault(_getViewportSize);
var _create = require('./create');
var _create2 = _interopRequireDefault(_create);
var _bottomLeft = require('./bottom-left');
var _bottomLeft2 = _interopRequireDefault(_bottomLeft);
var _bottomRight = require('./bottom-right');
var _bottomRight2 = _interopRequireDefault(_bottomRight);
var _topLeft = require('./top-left');
var _topLeft2 = _interopRequireDefault(_topLeft);
var _topRight = require('./top-right');
var _topRight2 = _interopRequireDefault(_topRight);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var positionMap = {
BottomLeft: _bottomLeft2['default'],
BottomRight: _bottomRight2['default'],
TopLeft: _topLeft2['default'],
TopRight: _topRight2['default']
};
function locate(anchorBoundingBox, containerBoundingBox, contentDimension, options) {
var viewport = (0, _getViewportSize2['default'])();
var anchorBoundingBoxViewport = options.anchorBoundingBoxViewport,
cushion = options.cushion;
var horizontal = void 0;
var vertical = void 0;
// 只有当左边放不下,并且右边能够放下的时候才移动到右边
if (anchorBoundingBoxViewport.left + contentDimension.width > viewport.width && anchorBoundingBoxViewport.right - contentDimension.width > 0) {
horizontal = 'Right';
} else {
horizontal = 'Left';
}
// 只有当下面放不下,并且上面能够放下时才移动到上面
if (anchorBoundingBoxViewport.bottom + cushion + contentDimension.height > viewport.height && anchorBoundingBoxViewport.top - cushion - contentDimension.height > 0) {
vertical = 'Top';
} else {
vertical = 'Bottom';
}
var key = '' + vertical + horizontal;
return positionMap[key].locate(anchorBoundingBox, containerBoundingBox, contentDimension, options);
}
var AutoBottomLeft = (0, _create2['default'])(locate);
exports['default'] = AutoBottomLeft;