Browse Source

Merge pull request #211847 in DEC/fineui from master to feature/x

* commit 'c397ee108d58f24db07c16f013cb84f5d0af54ba':
  auto upgrade version to 2.0.20221214115751
  BI-118849 fix: 适配 offsetStyle center和middle问题
  KERNEL-11877 fix: supportCSSTransform 默认改为true
master
superman 2 years ago
parent
commit
26b07bb58c
  1. 2
      package.json
  2. 10
      src/base/combination/combo.js
  3. 43
      src/core/platform/web/dom.js

2
package.json

@ -1,6 +1,6 @@
{
"name": "fineui",
"version": "2.0.20221214104244",
"version": "2.0.20221214115751",
"description": "fineui",
"main": "dist/fineui_without_conflict.min.js",
"types": "dist/lib/index.d.ts",

10
src/base/combination/combo.js

@ -38,9 +38,9 @@
adjustLength: 0, // 调整的距离
adjustXOffset: 0,
adjustYOffset: 0,
supportCSSTransform: false,
supportCSSTransform: true,
hideChecker: BI.emptyFn,
offsetStyle: "left", // left,right,center
offsetStyle: "", // "",center,middle
el: {},
popup: {},
comboClass: "bi-combo-popup",
@ -308,10 +308,10 @@
var scaleX = positonedRect.width / positionRelativeElement.offsetWidth;
var 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));
p.left && (p.left = Math.round(p.left / scaleX));
p.adaptHeight && (p.adaptHeight = p.adaptHeight / scaleY);
p.adaptHeight && (p.adaptHeight = Math.round(p.adaptHeight / scaleY));
}
if ("adaptHeight" in p) {

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

@ -433,17 +433,18 @@
};
},
getCenterAdaptPosition: function (combo, popup) {
var comboOffset = combo.element.offset();
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(),
windowBounds = BI.Widget._renderEngine.createElement("body").bounds();
getCenterAdaptPosition: function (combo, popup, positionRelativeElement) {
var comboRect = combo.element[0].getBoundingClientRect(),
popupRect = popup.element[0].getBoundingClientRect(),
positionRelativeElementRect = positionRelativeElement.getBoundingClientRect(),
viewportBounds = document.documentElement.getBoundingClientRect();
var left;
if (comboOffset.left + comboBounds.width / 2 + popupBounds.width / 2 > windowBounds.width) {
left = windowBounds.width - popupBounds.width;
if (comboRect.left + comboRect.width / 2 + popupRect.width / 2 > viewportBounds.width) {
left = viewportBounds.width - comboRect.width - positionRelativeElementRect.left;
} else {
left = comboOffset.left + comboBounds.width / 2 - popupBounds.width / 2;
left = comboRect.left + (comboRect.width - popupRect.width) / 2 - positionRelativeElementRect.left;
}
if (left < 0) {
if (left + positionRelativeElementRect.left < 0) {
left = 0;
}
return {
@ -451,17 +452,19 @@
};
},
getMiddleAdaptPosition: function (combo, popup) {
var comboOffset = combo.element.offset();
var comboBounds = combo.element.bounds(), popupBounds = popup.element.bounds(),
windowBounds = BI.Widget._renderEngine.createElement("body").bounds();
getMiddleAdaptPosition: function (combo, popup, positionRelativeElement) {
var comboRect = combo.element[0].getBoundingClientRect(),
popupRect = popup.element[0].getBoundingClientRect(),
positionRelativeElementRect = positionRelativeElement.getBoundingClientRect(),
viewportBounds = document.documentElement.getBoundingClientRect();
var top;
if (comboOffset.top + comboBounds.height / 2 + popupBounds.height / 2 > windowBounds.height) {
top = windowBounds.height - popupBounds.height;
if (comboRect.top + comboRect.height / 2 + popupRect.height / 2 > viewportBounds.height) {
top = viewportBounds.height - popupRect.height - positionRelativeElementRect.top;
} else {
top = comboOffset.top + comboBounds.height / 2 - popupBounds.height / 2;
top = comboRect.top + (comboRect.height - popupRect.height) / 2 - positionRelativeElementRect.top;
}
if (top < 0) {
if (top + positionRelativeElementRect.top < 0) {
top = 0;
}
return {
@ -681,19 +684,19 @@
switch (offsetStyle) {
case "center":
if (position.change) {
var p = BI.DOM.getMiddleAdaptPosition(combo, popup);
var p = BI.DOM.getMiddleAdaptPosition(combo, popup, positionRelativeElement);
position.top = p.top;
} else {
var p = BI.DOM.getCenterAdaptPosition(combo, popup);
var p = BI.DOM.getCenterAdaptPosition(combo, popup, positionRelativeElement);
position.left = p.left;
}
break;
case "middle":
if (position.change) {
var p = BI.DOM.getCenterAdaptPosition(combo, popup);
var p = BI.DOM.getCenterAdaptPosition(combo, popup, positionRelativeElement);
position.left = p.left;
} else {
var p = BI.DOM.getMiddleAdaptPosition(combo, popup);
var p = BI.DOM.getMiddleAdaptPosition(combo, popup, positionRelativeElement);
position.top = p.top;
}
break;

Loading…
Cancel
Save