Browse Source

Pull request #3254: KERNEL-11877 feat: direction:bottom和direction:top空间不够时的调整逻辑

Merge in VISUAL/fineui from ~DAILER/fineui:master to master

* commit 'c486970d507ae7796af2c2804a7e18d8d0f6494b':
  KERNEL-11877 feat: direction:bottom和direction:top空间不够时的调整逻辑
  KERNEL-11877 feat: container支持函数, 修复错误
es6
Dailer-刘荣歆 2 years ago
parent
commit
c61b1dd87a
  1. 1
      src/case/combo/bubblecombo/combo.bubble.js
  2. 35
      src/core/platform/web/dom.js
  3. 2
      src/less/core/utils/motion/zoom.less

1
src/case/combo/bubblecombo/combo.bubble.js

@ -53,6 +53,7 @@ BI.BubbleCombo = BI.inherit(BI.Widget, {
offsetStyle: o.offsetStyle, offsetStyle: o.offsetStyle,
showArrow: true, showArrow: true,
comboClass: o.comboClass, comboClass: o.comboClass,
supportCSSTransform: o.supportCSSTransform,
el: o.el, el: o.el,
popup: () => BI.extend({ popup: () => BI.extend({
type: "bi.bubble_popup_view", type: "bi.bubble_popup_view",

35
src/core/platform/web/dom.js

@ -219,9 +219,9 @@
}, },
isRightSpaceEnough: function (combo, popup, extraWidth) { isRightSpaceEnough: function (combo, popup, extraWidth) {
var viewBounds = popup.element.bounds(), var viewBounds = popup.element[0].getBoundingClientRect(),
windowBounds = BI.Widget._renderEngine.createElement("body").bounds(); viewportBounds = document.documentElement.getBoundingClientRect();
return BI.DOM.getRightPosition(combo, popup, extraWidth).left + viewBounds.width <= windowBounds.width; return BI.DOM.getRightPosition(combo, popup, extraWidth).left + viewBounds.width <= viewportBounds.width;
}, },
isInnerRightSpaceEnough: function (combo, popup, extraWidth) { isInnerRightSpaceEnough: function (combo, popup, extraWidth) {
@ -233,9 +233,9 @@
}, },
isBottomSpaceEnough: function (combo, popup, extraHeight) { isBottomSpaceEnough: function (combo, popup, extraHeight) {
var viewBounds = popup.element.bounds(), var viewBounds = popup.element[0].getBoundingClientRect(),
windowBounds = BI.Widget._renderEngine.createElement("body").bounds(); viewportBounds = document.documentElement.getBoundingClientRect();
return BI.DOM.getBottomPosition(combo, popup, extraHeight).top + viewBounds.height <= windowBounds.height; return BI.DOM.getBottomPosition(combo, popup, extraHeight).top + viewBounds.height <= viewportBounds.height;
}, },
isRightSpaceLarger: function (combo) { isRightSpaceLarger: function (combo) {
@ -318,23 +318,24 @@
getTopAlignPosition: function (combo, popup, extraHeight, needAdaptHeight, container) { getTopAlignPosition: function (combo, popup, extraHeight, needAdaptHeight, container) {
var comboOffset = combo.element.offset(); var comboOffset = combo.element.offset();
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(), var comboBounds = combo.element[0].getBoundingClientRect(),
windowBounds = BI.Widget._renderEngine.createElement("body").bounds(), popupBounds = popup.element[0].getBoundingClientRect(),
viewportBounds = document.documentElement.getBoundingClientRect(),
containerBounds = container ? container.getBoundingClientRect() : { top: 0 }; containerBounds = container ? container.getBoundingClientRect() : { top: 0 };
var top, adaptHeight, dir; var top, adaptHeight, dir;
if (BI.DOM.isBottomSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { if (BI.DOM.isBottomSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) {
top = comboOffset.top - containerBounds.top + extraHeight; top = comboOffset.top - containerBounds.top + extraHeight;
} else if (needAdaptHeight) { } else if (needAdaptHeight) {
top = comboOffset.top + extraHeight; top = comboBounds.top - containerBounds.top + extraHeight;
adaptHeight = windowBounds.height - top; adaptHeight = viewportBounds.height - top;
} else if (BI.DOM.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { } else if (BI.DOM.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) {
// 下方空间不足且不允许调整高度的情况下,优先使用上对齐 // 下方空间不足且不允许调整高度的情况下,优先使用上对齐
top = comboOffset.top + comboBounds.height - popupBounds.height - extraHeight; top = comboBounds.top + comboBounds.height - popupBounds.height - containerBounds.top - extraHeight;
dir = "top"; dir = "top";
} else { } else {
top = windowBounds.height - popupBounds.height; top = viewportBounds.height - popupBounds.height;
if (top < extraHeight) { if (top < extraHeight) {
adaptHeight = windowBounds.height - extraHeight; adaptHeight = viewportBounds.height - extraHeight;
} }
} }
if (top < extraHeight) { if (top < extraHeight) {
@ -383,11 +384,11 @@
if (BI.DOM.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { if (BI.DOM.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) {
top = comboOffset.top + comboBounds.height - containerBounds.top - popupBounds.height; top = comboOffset.top + comboBounds.height - containerBounds.top - popupBounds.height;
} else if (needAdaptHeight) { } else if (needAdaptHeight) {
top = 0; top = 0 - containerBounds.top;
adaptHeight = comboOffset.top + comboBounds.height - extraHeight; adaptHeight = comboBounds.top + comboBounds.height - extraHeight;
} else if (BI.DOM.isBottomSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { } else if (BI.DOM.isBottomSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) {
// 上方空间不足且不允许调整高度的情况下,优先使用下对齐 // 上方空间不足且不允许调整高度的情况下,优先使用下对齐
top = comboOffset.top + extraHeight; top = comboOffset.top - containerBounds.top + extraHeight;
dir = "bottom"; dir = "bottom";
} else { } else {
top = 0; top = 0;
@ -395,7 +396,7 @@
adaptHeight = windowBounds.height - extraHeight; adaptHeight = windowBounds.height - extraHeight;
} }
} }
if (top < 0) { if (top + containerBounds.top < 0) {
top = 0; top = 0;
} }
return adaptHeight ? { return adaptHeight ? {

2
src/less/core/utils/motion/zoom.less

@ -4,7 +4,7 @@
.make-motion(@className, @keyframeName, @duration); .make-motion(@className, @keyframeName, @duration);
.@{className}-enter, .@{className}-enter,
.@{className}-appear { .@{className}-appear {
transform: scale(0); // need this by yiminghe //transform: scale(0); // need this by yiminghe, but dailer did not need this
opacity: 0; opacity: 0;
animation-timing-function: @ease-out-circ; animation-timing-function: @ease-out-circ;

Loading…
Cancel
Save