diff --git a/packages/fineui/src/base/combination/combo.js b/packages/fineui/src/base/combination/combo.js index 0721ba9e0..e3c5f5db8 100644 --- a/packages/fineui/src/base/combination/combo.js +++ b/packages/fineui/src/base/combination/combo.js @@ -267,34 +267,34 @@ export class Combo extends Bubble { belowMouse && isNotNull(e) ? { element: { - 0: e.target, - offset: () => { + 0: extend({}, e.target, { + getBoundingClientRect: function () { + return { + left: e.pageX, + top: e.pageY, + width: 0, + height: 0, + }; + } + }), + offset: function () { return { left: e.pageX, top: e.pageY, }; }, - bounds: () => { - // offset为其相对于父定位元素的偏移 - return { - x: e.offsetX, - y: e.offsetY, - width: 0, - height: 24, - }; - }, - outerWidth: () => 0, - outerHeight: () => 24, }, } : this.combo; - const positionRelativeElement = supportCSSTransform - ? DOM.getPositionRelativeContainingBlock( - isNull(container) - ? this.element[0] - : Widget._renderEngine.createElement(isFunction(container) ? container() : container)[0] - ) - : null; + + const positionRelativeElement = DOM.getPositionRelativeContainingBlock( + isNull(container) + ? this.element[0] + : BI.isWidget(container) + ? container.element[0] + : BI.Widget._renderEngine.createElement(isFunction(container) ? container() : container)[0] + ); + const TRIANGLE_LENGTH = 12; switch (direction) { case "bottom": @@ -513,8 +513,14 @@ export class Combo extends Bubble { const scaleX = positonedRect.width / positionRelativeElement.offsetWidth; const scaleY = positonedRect.height / positionRelativeElement.offsetHeight; - p.top && (p.top = p.top / scaleY); - p.left && (p.left = p.left / scaleX); + p.top && (p.top = Math.round(p.top / scaleY + positionRelativeElement.scrollTop)); + p.left && (p.left = Math.round(p.left / scaleX + positionRelativeElement.scrollLeft)); + + p.adaptHeight && (p.adaptHeight = Math.round(p.adaptHeight / scaleY)); + } + + if ("adaptHeight" in p) { + this.resetListHeight(p.adaptHeight); } if ("left" in p) {