diff --git a/packages/fineui/src/core/utils/dom.js b/packages/fineui/src/core/utils/dom.js index df573a746..216587ec3 100644 --- a/packages/fineui/src/core/utils/dom.js +++ b/packages/fineui/src/core/utils/dom.js @@ -66,10 +66,10 @@ export function preloadImages(srcArray, onload) { each(srcArray, (i, src) => { images[i] = new Image(); images[i].src = src; - images[i].onload = function() { + images[i].onload = function () { complete(); }; - images[i].onerror = function() { + images[i].onerror = function () { complete(); }; }); @@ -741,8 +741,14 @@ export function getComboPosition(combo, popup, extraWidth, extraHeight, needAdap default: break; } - if (needAdaptHeight === true) { - popup.resetHeight && popup.resetHeight(Math.min(viewportBounds.height - position.top - (positionRelativeElement ? positionRelativeElement.getBoundingClientRect().top : 0), maxHeight)); + if (needAdaptHeight === true && popup.resetHeight) { + const comboRect = combo.element[0].getBoundingClientRect(); + const relativeOffset = positionRelativeElement ? positionRelativeElement.getBoundingClientRect().top : 0; + if (position.top < comboRect.top) { + popup.resetHeight(Math.min(viewportBounds.height - position.top - relativeOffset, comboRect.top, maxHeight)); + } else if (position.top > comboRect.bottom) { + popup.resetHeight(Math.min(viewportBounds.height - position.top - relativeOffset, viewportBounds.height - comboRect.bottom, maxHeight)); + } } return position;