zent
Version:
一套前端设计语言和基于React的实现
85 lines (56 loc) • 2.67 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 _bottomCenter = require('./bottom-center');
var _bottomCenter2 = _interopRequireDefault(_bottomCenter);
var _topLeft = require('./top-left');
var _topLeft2 = _interopRequireDefault(_topLeft);
var _topRight = require('./top-right');
var _topRight2 = _interopRequireDefault(_topRight);
var _topCenter = require('./top-center');
var _topCenter2 = _interopRequireDefault(_topCenter);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var positionMap = {
BottomLeft: _bottomLeft2['default'],
BottomRight: _bottomRight2['default'],
BottomCenter: _bottomCenter2['default'],
TopLeft: _topLeft2['default'],
TopRight: _topRight2['default'],
TopCenter: _topCenter2['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;
var mid = (anchorBoundingBoxViewport.left + anchorBoundingBoxViewport.right) / 2;
var halfWidth = contentDimension.width / 2;
// 只有当居中放不下,并且右边能够放下的时候才移动到右边,如果左边能放下就移动到左边
if (mid + halfWidth > viewport.width && anchorBoundingBoxViewport.right - contentDimension.width > 0) {
horizontal = 'Right';
} else if (mid - halfWidth < 0 && anchorBoundingBoxViewport.left + contentDimension.width < viewport.width) {
horizontal = 'Left';
} else {
horizontal = 'Center';
}
// 只有当下面放不下,并且上面能够放下时才移动到上面
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 AutoBottomCenter = (0, _create2['default'])(locate);
exports['default'] = AutoBottomCenter;