From e01442ef69c7f8001d86954b6cc5d2461ebd3578 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 15 Dec 2022 16:17:06 +0800 Subject: [PATCH] =?UTF-8?q?BI-118849=20fix:=20combo=E5=9C=A8=E5=B1=8F?= =?UTF-8?q?=E5=B9=95=E8=BE=B9=E7=BC=98,=E5=B7=A6=E5=8F=B3=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=8D=E5=A4=9F=E4=B9=8B=E5=90=8E=E7=9A=84=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E8=B0=83=E6=95=B4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/platform/web/dom.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/core/platform/web/dom.js b/src/core/platform/web/dom.js index 9b1026683..74a1a2a28 100644 --- a/src/core/platform/web/dom.js +++ b/src/core/platform/web/dom.js @@ -250,12 +250,12 @@ _getLeftAlignPosition: function (combo, popup, extraWidth, container) { var comboRect = combo.element[0].getBoundingClientRect(), - popupRect = popup.element.bounds(), + popupRect = popup.element[0].getBoundingClientRect(), viewportRect = document.documentElement.getBoundingClientRect(), containerRect = container ? container.getBoundingClientRect() : { left: 0 }; var left = comboRect.left - containerRect.left + extraWidth; - if (left + popupRect.width - containerRect.left > viewportRect.width) { + if (comboRect.left + popupRect.width > viewportRect.width) { left = viewportRect.width - popupRect.width - containerRect.left; } return left; @@ -265,12 +265,13 @@ var left = this._getLeftAlignPosition(combo, popup, extraWidth, container); var dir = ""; // 如果放不下,优先使用RightAlign, 如果RightAlign也放不下, 再使用left=0 - if (left < 0) { + var containerRect = container ? container.getBoundingClientRect() : { left: 0 }; + if (left + containerRect.left < 0) { left = this._getRightAlignPosition(combo, popup, extraWidth); dir = "left"; } - if (left < 0) { - left = 0; + if (left + containerRect.left < 0) { + left = 0 - containerRect.left; } return { left: left, @@ -678,8 +679,8 @@ getComboPosition: function (combo, popup, extraWidth, extraHeight, needAdaptHeight, directions, offsetStyle, positionRelativeElement) { extraWidth || (extraWidth = 0); extraHeight || (extraHeight = 0); - var bodyHeight = BI.Widget._renderEngine.createElement("body").bounds().height - extraHeight; - var maxHeight = Math.min(popup.attr("maxHeight") || bodyHeight, bodyHeight); + var viewportBounds = document.documentElement.getBoundingClientRect(); + var maxHeight = Math.min(popup.attr("maxHeight") || viewportBounds.height, viewportBounds.height); popup.resetHeight && popup.resetHeight(maxHeight); var position = BI.DOM.getComboPositionByDirections(combo, popup, extraWidth, extraHeight, needAdaptHeight, directions || ["bottom", "top", "right", "left"], positionRelativeElement); switch (offsetStyle) { @@ -703,7 +704,7 @@ break; } if (needAdaptHeight === true) { - popup.resetHeight && popup.resetHeight(Math.min(bodyHeight - position.top + (positionRelativeElement ? positionRelativeElement.getBoundingClientRect().top : 0), maxHeight)); + popup.resetHeight && popup.resetHeight(Math.min(viewportBounds.height - position.top + (positionRelativeElement ? positionRelativeElement.getBoundingClientRect().top : 0), maxHeight)); } return position; },