SapUI5: Всплывающая подсказка (Tooltip)
В SapUI5 нет отдельного элемента, позволяющего реализовать всплывающие подсказки (тултип) при наведении мышкой на элемент. ( Или может я плохо искал 🙂 ). Элемента может и нету, но потребность есть, причем очень большая! Так сделаем свои подсказки с «блэкджеком» и тенями :)!
Готовый пример — https://github.com/kannade/sapui5_tooltip.
В sapui5 есть элемент sap.m.Popover, который позволяет создавать разнообразные окна. Сделаем так, чтобы окно вызывалось не при клике, а при наведении мыши!
В представлении нарисуем простую иконку:
<core:icon src="sap-icon://hint" class="infoIcon" color="#031E48" id="iconHint"> <core:layoutdata> <flexitemdata growFactor="1"></flexitemdata> </core:layoutdata> </core:icon> |
Определим два события для иконки: События наведения мышки на элемент (mouseenter) и событие выхода мышки из области элемента (mouseleave):
onAfterRendering: function() { //взяли нашу иконку и определили для нее события mouseenter и mouseleave var oIcon = this.getView().byId("iconHint"); oIcon.attachBrowserEvent("mouseenter", this.onMainIcon, this); oIcon.attachBrowserEvent("mouseleave", this.onIconMouseLeave, this); }, |
При наведении мышки на элемент будет отрабатывать метод onMainIcon, где, в массиве сообщений (который предварительно заполнили в onInit) находим текст, который надо показать во всплывающем окне для данного элемента и открываем PopOver:
onMainIcon: function(oEvent) { for (var i = 0; i < this._message.length; i++) { if (this._message[i][1] === oEvent.target.dataset.sapUi) { var message = this._message[i][0]; break; } } this._openHelpPopOver(message, oEvent.target); }, |
Когда мышку с элемента мы убираем, срабатывает метод onIconMouseLeave и закрываем ранее открытый PopOver:
onIconMouseLeave: function() { this._closePopOver(); }, |
В контроллере есть еще несколько методов:
- _openHelpPopOver — метод, который открывает popOver:
/sapui5_tooltip/blob/master/webapp/controller/Main.controller.js _openHelpPopOver: function(sText, oElem) { this._getPopOver(); this._setTextPopover(sText); if (this._oPopover._oOpenBy !== oElem) { this._oPopover.close(); } this._oPopover.openBy(oElem); },
- _closePopOver — метод, который закрывает popOver:
/sapui5_tooltip/blob/master/webapp/controller/Main.controller.js _closePopOver: function() { if (this._oPopover) { this._oPopover.close(); } },
- _getPopOver — метод, в котором мы получаем, либо создаем popOver:
/sapui5_tooltip/blob/master/webapp/controller/Main.controller.js _getPopOver: function() { if (!this._oPopover) { //создаем фрагмент this._oPopover = Fragment.byId("HelpPopover", "HelpPopoverId"); if (!this._oPopover) { this._oPopover = sap.ui.xmlfragment("HelpPopover", "hint.view.fragment.HelpPopover", this); } } return this._oPopover; },
- _setTextPopover — метод, устанавливающий текст всплывающего сообщения:
/sapui5_tooltip/blob/master/webapp/controller/Main.controller.js _setTextPopover: function(sText) { var oTxt = sap.ui.core.Fragment.byId("HelpPopover", "HelpTxtId"); //получаем фрагмент по его ID oTxt.setHtmlText(sText); }
Вот так, довольно быстро, можно решить проблему со всплывающими подсказками в SapUI5!