|
|
@ -108,12 +108,13 @@ |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 获取滚动条的宽度,页面display: none时候获取到的为0
|
|
|
|
// 获取滚动条的宽度,页面display: none时候获取到的为0
|
|
|
|
getScrollWidth: function () { |
|
|
|
getScrollWidth: function (css) { |
|
|
|
if (BI.isNull(this._scrollWidth) || this._scrollWidth === 0) { |
|
|
|
if (BI.isNull(this._scrollWidth) || this._scrollWidth === 0) { |
|
|
|
var ul = BI.Widget._renderEngine.createElement("<div>").width(50).height(50).css({ |
|
|
|
var ul = BI.Widget._renderEngine.createElement("<div>").width(50).height(50).css({ |
|
|
|
position: "absolute", |
|
|
|
position: "absolute", |
|
|
|
top: "-9999px", |
|
|
|
top: "-9999px", |
|
|
|
overflow: "scroll" |
|
|
|
overflow: "scroll", |
|
|
|
|
|
|
|
...css |
|
|
|
}).appendTo("body"); |
|
|
|
}).appendTo("body"); |
|
|
|
this._scrollWidth = ul[0].offsetWidth - ul[0].clientWidth; |
|
|
|
this._scrollWidth = ul[0].offsetWidth - ul[0].clientWidth; |
|
|
|
ul.destroy(); |
|
|
|
ul.destroy(); |
|
|
@ -156,7 +157,7 @@ |
|
|
|
var popupEl = popup.element; |
|
|
|
var popupEl = popup.element; |
|
|
|
var elRect = el[0].getBoundingClientRect(); |
|
|
|
var elRect = el[0].getBoundingClientRect(); |
|
|
|
var popupElRect = popupEl[0].getBoundingClientRect(); |
|
|
|
var popupElRect = popupEl[0].getBoundingClientRect(); |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : { left: 0 }; |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : {left: 0}; |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
return { |
|
|
|
left: elRect.left - containerRect.left - popupElRect.width - (extraWidth || 0) |
|
|
|
left: elRect.left - containerRect.left - popupElRect.width - (extraWidth || 0) |
|
|
@ -172,7 +173,7 @@ |
|
|
|
getRightPosition: function (combo, popup, extraWidth, container) { |
|
|
|
getRightPosition: function (combo, popup, extraWidth, container) { |
|
|
|
var el = combo.element; |
|
|
|
var el = combo.element; |
|
|
|
var elRect = el[0].getBoundingClientRect(); |
|
|
|
var elRect = el[0].getBoundingClientRect(); |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : { left: 0 }; |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : {left: 0}; |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
return { |
|
|
|
left: elRect.left + elRect.width - containerRect.left + (extraWidth || 0) |
|
|
|
left: elRect.left + elRect.width - containerRect.left + (extraWidth || 0) |
|
|
@ -191,7 +192,7 @@ |
|
|
|
var popupEl = popup.element; |
|
|
|
var popupEl = popup.element; |
|
|
|
var elRect = el[0].getBoundingClientRect(); |
|
|
|
var elRect = el[0].getBoundingClientRect(); |
|
|
|
var popupElRect = popupEl[0].getBoundingClientRect(); |
|
|
|
var popupElRect = popupEl[0].getBoundingClientRect(); |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : { top: 0 }; |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : {top: 0}; |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
return { |
|
|
|
top: elRect.top - containerRect.top - popupElRect.height - (extraHeight || 0) |
|
|
|
top: elRect.top - containerRect.top - popupElRect.height - (extraHeight || 0) |
|
|
@ -201,7 +202,7 @@ |
|
|
|
getBottomPosition: function (combo, popup, extraHeight, container) { |
|
|
|
getBottomPosition: function (combo, popup, extraHeight, container) { |
|
|
|
var el = combo.element; |
|
|
|
var el = combo.element; |
|
|
|
var elRect = el[0].getBoundingClientRect(); |
|
|
|
var elRect = el[0].getBoundingClientRect(); |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : { top: 0 }; |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : {top: 0}; |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
return { |
|
|
|
top: elRect.top - containerRect.top + elRect.height + (extraHeight || 0) |
|
|
|
top: elRect.top - containerRect.top + elRect.height + (extraHeight || 0) |
|
|
@ -254,7 +255,7 @@ |
|
|
|
var comboRect = combo.element[0].getBoundingClientRect(), |
|
|
|
var comboRect = combo.element[0].getBoundingClientRect(), |
|
|
|
popupRect = popup.element[0].getBoundingClientRect(), |
|
|
|
popupRect = popup.element[0].getBoundingClientRect(), |
|
|
|
viewportRect = document.documentElement.getBoundingClientRect(), |
|
|
|
viewportRect = document.documentElement.getBoundingClientRect(), |
|
|
|
containerRect = container ? container.getBoundingClientRect() : { left: 0 }; |
|
|
|
containerRect = container ? container.getBoundingClientRect() : {left: 0}; |
|
|
|
var left = comboRect.left - containerRect.left + extraWidth; |
|
|
|
var left = comboRect.left - containerRect.left + extraWidth; |
|
|
|
|
|
|
|
|
|
|
|
if (comboRect.left + popupRect.width > viewportRect.width) { |
|
|
|
if (comboRect.left + popupRect.width > viewportRect.width) { |
|
|
@ -267,7 +268,7 @@ |
|
|
|
var left = this._getLeftAlignPosition(combo, popup, extraWidth, container); |
|
|
|
var left = this._getLeftAlignPosition(combo, popup, extraWidth, container); |
|
|
|
var dir = ""; |
|
|
|
var dir = ""; |
|
|
|
// 如果放不下,优先使用RightAlign, 如果RightAlign也放不下, 再使用left=0
|
|
|
|
// 如果放不下,优先使用RightAlign, 如果RightAlign也放不下, 再使用left=0
|
|
|
|
var containerRect = container ? container.getBoundingClientRect() : { left: 0 }; |
|
|
|
var containerRect = container ? container.getBoundingClientRect() : {left: 0}; |
|
|
|
if (left + containerRect.left < 0) { |
|
|
|
if (left + containerRect.left < 0) { |
|
|
|
left = this._getRightAlignPosition(combo, popup, extraWidth); |
|
|
|
left = this._getRightAlignPosition(combo, popup, extraWidth); |
|
|
|
dir = "left"; |
|
|
|
dir = "left"; |
|
|
@ -293,7 +294,7 @@ |
|
|
|
_getRightAlignPosition: function (combo, popup, extraWidth, container) { |
|
|
|
_getRightAlignPosition: function (combo, popup, extraWidth, container) { |
|
|
|
var comboBounds = combo.element[0].getBoundingClientRect(), |
|
|
|
var comboBounds = combo.element[0].getBoundingClientRect(), |
|
|
|
viewBounds = popup.element[0].getBoundingClientRect(), |
|
|
|
viewBounds = popup.element[0].getBoundingClientRect(), |
|
|
|
containerRect = container ? container.getBoundingClientRect() : { left: 0 }; |
|
|
|
containerRect = container ? container.getBoundingClientRect() : {left: 0}; |
|
|
|
return comboBounds.left + comboBounds.width - viewBounds.width - extraWidth - containerRect.left; |
|
|
|
return comboBounds.left + comboBounds.width - viewBounds.width - extraWidth - containerRect.left; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
@ -327,7 +328,7 @@ |
|
|
|
var comboBounds = combo.element[0].getBoundingClientRect(), |
|
|
|
var comboBounds = combo.element[0].getBoundingClientRect(), |
|
|
|
popupBounds = popup.element[0].getBoundingClientRect(), |
|
|
|
popupBounds = popup.element[0].getBoundingClientRect(), |
|
|
|
viewportBounds = document.documentElement.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 = comboBounds.top - containerBounds.top + extraHeight; |
|
|
|
top = comboBounds.top - containerBounds.top + extraHeight; |
|
|
@ -386,7 +387,7 @@ |
|
|
|
var comboBounds = combo.element[0].getBoundingClientRect(), |
|
|
|
var comboBounds = combo.element[0].getBoundingClientRect(), |
|
|
|
popupBounds = popup.element[0].getBoundingClientRect(), |
|
|
|
popupBounds = popup.element[0].getBoundingClientRect(), |
|
|
|
windowBounds = BI.Widget._renderEngine.createElement("body").bounds(), |
|
|
|
windowBounds = BI.Widget._renderEngine.createElement("body").bounds(), |
|
|
|
containerBounds = container ? container.getBoundingClientRect() : { top: 0 }; |
|
|
|
containerBounds = container ? container.getBoundingClientRect() : {top: 0}; |
|
|
|
var top, adaptHeight, dir; |
|
|
|
var top, adaptHeight, dir; |
|
|
|
if (BI.DOM.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { |
|
|
|
if (BI.DOM.isTopSpaceEnough(combo, popup, -1 * comboBounds.height + extraHeight)) { |
|
|
|
top = comboBounds.top + comboBounds.height - containerBounds.top - popupBounds.height; |
|
|
|
top = comboBounds.top + comboBounds.height - containerBounds.top - popupBounds.height; |
|
|
@ -746,7 +747,7 @@ |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
getPositionRelativeContainingBlockRect: function (element) { |
|
|
|
getPositionRelativeContainingBlockRect: function (element) { |
|
|
|
const positionRelativeElement = BI.DOM.getPositionRelativeContainingBlock(element); |
|
|
|
const positionRelativeElement = BI.DOM.getPositionRelativeContainingBlock(element); |
|
|
|
const { top, right, bottom, left, width, height, x, y } = positionRelativeElement.getBoundingClientRect(); |
|
|
|
const {top, right, bottom, left, width, height, x, y} = positionRelativeElement.getBoundingClientRect(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
return { |
|
|
|