From c5424d8949474b9221fdc6613843a66521360fd0 Mon Sep 17 00:00:00 2001 From: windy <1374721899@qq.com> Date: Wed, 12 Sep 2018 14:26:59 +0800 Subject: [PATCH] BI-32433 --- src/base/combination/combo.js | 63 +++++++++++++------ src/base/single/button/button.basic.js | 8 +-- src/widget/downlist/combo.downlist.js | 4 +- .../multilayerdownlist/combo.downlist.js | 4 +- 4 files changed, 52 insertions(+), 27 deletions(-) diff --git a/src/base/combination/combo.js b/src/base/combination/combo.js index f1e328b3c..c5f78040d 100644 --- a/src/base/combination/combo.js +++ b/src/base/combination/combo.js @@ -288,13 +288,13 @@ BI.Combo = BI.inherit(BI.Widget, { this.fireEvent(BI.Combo.EVENT_AFTER_HIDEVIEW); }, - _popupView: function () { + _popupView: function (e) { this._assertPopupViewRender(); this.fireEvent(BI.Combo.EVENT_BEFORE_POPUPVIEW); this.popupView.visible(); - this.adjustWidth(); - this.adjustHeight(); + this.adjustWidth(e); + this.adjustHeight(e); this.element.addClass(this.options.comboClass); BI.Widget._renderEngine.createElement(document).unbind("mousedown." + this.getName()).unbind("mousewheel." + this.getName()); @@ -302,7 +302,7 @@ BI.Combo = BI.inherit(BI.Widget, { this.fireEvent(BI.Combo.EVENT_AFTER_POPUPVIEW); }, - adjustWidth: function () { + adjustWidth: function (e) { var o = this.options; if (!this.popupView) { return; @@ -320,59 +320,84 @@ BI.Combo = BI.inherit(BI.Widget, { } }, - adjustHeight: function () { + adjustHeight: function (e) { var o = this.options, p = {}; if (!this.popupView) { return; } var isVisible = this.popupView.isVisible(); this.popupView.visible(); + var combo = BI.isNotNull(e) ? { + element: { + offset: function () { + return { + left: e.pageX, + top: e.pageY + }; + }, + bounds: function () { + // offset为其相对于父定位元素的偏移 + return { + x: e.offsetX, + y: e.offsetY, + width: 0, + height: 24 + }; + }, + outerWidth: function () { + return 0; + }, + outerHeight: function () { + return 24; + } + } + } : this.combo; switch (o.direction) { case "bottom": case "bottom,right": - p = $.getComboPosition(this.combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, ["bottom", "top", "right", "left"], o.offsetStyle); + p = $.getComboPosition(combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, ["bottom", "top", "right", "left"], o.offsetStyle); break; case "top": case "top,right": - p = $.getComboPosition(this.combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, ["top", "bottom", "right", "left"], o.offsetStyle); + p = $.getComboPosition(combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, ["top", "bottom", "right", "left"], o.offsetStyle); break; case "left": case "left,bottom": - p = $.getComboPosition(this.combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, ["left", "right", "bottom", "top"], o.offsetStyle); + p = $.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, ["left", "right", "bottom", "top"], o.offsetStyle); break; case "right": case "right,bottom": - p = $.getComboPosition(this.combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, ["right", "left", "bottom", "top"], o.offsetStyle); + p = $.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, ["right", "left", "bottom", "top"], o.offsetStyle); break; case "top,left": - p = $.getComboPosition(this.combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, ["top", "bottom", "left", "right"], o.offsetStyle); + p = $.getComboPosition(combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, ["top", "bottom", "left", "right"], o.offsetStyle); break; case "bottom,left": - p = $.getComboPosition(this.combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, ["bottom", "top", "left", "right"], o.offsetStyle); + p = $.getComboPosition(combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, ["bottom", "top", "left", "right"], o.offsetStyle); break; case "left,top": - p = $.getComboPosition(this.combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, ["left", "right", "top", "bottom"], o.offsetStyle); + p = $.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, ["left", "right", "top", "bottom"], o.offsetStyle); break; case "right,top": - p = $.getComboPosition(this.combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, ["right", "left", "top", "bottom"], o.offsetStyle); + p = $.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, ["right", "left", "top", "bottom"], o.offsetStyle); break; case "top,custom": case "custom,top": - p = $.getTopAdaptPosition(this.combo, this.popupView, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight); + p = $.getTopAdaptPosition(combo, this.popupView, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight); break; case "custom,bottom": case "bottom,custom": - p = $.getBottomAdaptPosition(this.combo, this.popupView, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight); + p = $.getBottomAdaptPosition(combo, this.popupView, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight); break; case "left,custom": case "custom,left": - p = $.getLeftAdaptPosition(this.combo, this.popupView, o.adjustXOffset || o.adjustLength); + p = $.getLeftAdaptPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength); delete p.top; delete p.adaptHeight; break; case "custom,right": case "right,custom": - p = $.getRightAdaptPosition(this.combo, this.popupView, o.adjustXOffset || o.adjustLength); + p = $.getRightAdaptPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength); delete p.top; delete p.adaptHeight; break; @@ -443,9 +468,9 @@ BI.Combo = BI.inherit(BI.Widget, { return this.isEnabled() && this.combo.isEnabled() && !!this.popupView && this.popupView.isVisible(); }, - showView: function () { + showView: function (e) { if (this.isEnabled() && this.combo.isEnabled()) { - this._popupView(); + this._popupView(e); } }, diff --git a/src/base/single/button/button.basic.js b/src/base/single/button/button.basic.js index 2f3583c60..68a348dfa 100644 --- a/src/base/single/button/button.basic.js +++ b/src/base/single/button/button.basic.js @@ -285,7 +285,7 @@ BI.BasicButton = BI.inherit(BI.Single, { } }, - _trigger: function () { + _trigger: function (e) { var o = this.options; if (!this.isEnabled()) { return; @@ -296,9 +296,9 @@ BI.BasicButton = BI.inherit(BI.Single, { this.setSelected(!this.isSelected())); } if (this.isValid()) { - o.handler.call(this, this.getValue(), this); + o.handler.call(this, this.getValue(), this, e); var v = this.getValue(); - this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, v, this); + this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, v, this, e); this.fireEvent(BI.BasicButton.EVENT_CHANGE, v, this); if (o.action) { BI.Actions.runAction(o.action, "click", o); @@ -311,7 +311,7 @@ BI.BasicButton = BI.inherit(BI.Single, { if (this.isValid()) { this.beforeClick(e); } - this._trigger(); + this._trigger(e); if (this.isValid()) { this.doClick(e); } diff --git a/src/widget/downlist/combo.downlist.js b/src/widget/downlist/combo.downlist.js index 409491328..654f85d4a 100644 --- a/src/widget/downlist/combo.downlist.js +++ b/src/widget/downlist/combo.downlist.js @@ -69,8 +69,8 @@ BI.DownListCombo = BI.inherit(BI.Widget, { this.downlistcombo.hideView(); }, - showView: function () { - this.downlistcombo.showView(); + showView: function (e) { + this.downlistcombo.showView(e); }, populate: function (items) { diff --git a/src/widget/multilayerdownlist/combo.downlist.js b/src/widget/multilayerdownlist/combo.downlist.js index dff06a23d..cdbea543b 100644 --- a/src/widget/multilayerdownlist/combo.downlist.js +++ b/src/widget/multilayerdownlist/combo.downlist.js @@ -68,8 +68,8 @@ BI.DownListCombo = BI.inherit(BI.Widget, { this.downlistcombo.hideView(); }, - showView: function () { - this.downlistcombo.showView(); + showView: function (e) { + this.downlistcombo.showView(e); }, populate: function (items) {