Создание кнопок на JavaScript API
Подключение и показ
Библиотека ui.buttons позволяет создавать кнопки не только разметкой, но и с помощью JavaScript API.
Подключение на странице
\Bitrix\Main\UI\Extension::load("ui.buttons");
Показ
Чтобы показать кнопку на странице, необходимо создать объект класса BX.UI.Button и вызвать метод renderTo.
<div id="container"></div>
<script>
(function() {
var button = new BX.UI.Button({ text: "Привет, кнопка!" });
var container = document.getElementById("container");
button.renderTo(container);
})();
</script>
Метод getContainer возвращает ссылку на DOM-элемент кнопки. Используйте его для гибкого построения интерфейсов.
var button = new BX.UI.Button({ text: "Привет, кнопка!" });
var layout = BX.create("div", {
props: {
className: "container"
},
children: [button.getContainer()]
});
Размеры и заглавные буквы
Размеры
Размер кнопки задается опцией size и перечислением BX.UI.Button.Size.
var button = new BX.UI.Button({
text: "Привет, кнопка!",
size: BX.UI.Button.Size.LARGE
});
Допустимые значения BX.UI.Button.Size:
BX.UI.Button.Size.LARGE— большая кнопка (47px)BX.UI.Button.Size.MEDIUM— средняя кнопка (39px), значение по умолчаниюBX.UI.Button.Size.SMALL— маленькая кнопка (33px)BX.UI.Button.Size.EXTRA_SMALL— максимально маленькая кнопка (26px)
Заглавные буквы
По умолчанию текст кнопки приводится к верхнему регистру. Опция noCaps=true позволяет отменить это поведение.
var button = new BX.UI.Button({
text: "Обычный текст",
color: BX.UI.Button.Color.SUCCESS,
noCaps: true
});
Цвета
Опция color отвечает за цвет кнопки. Значение этой опции задаются перечислением BX.UI.Button.Color.
var button = new BX.UI.Button({
text: "Привет, кнопка!",
color: BX.UI.Button.Color.SUCCESS
});
Допустимые значения BX.UI.Button.Color::
BX.UI.Button.Color.DANGERBX.UI.Button.Color.DANGER_DARKBX.UI.Button.Color.DANGER_LIGHTBX.UI.Button.Color.SUCCESSBX.UI.Button.Color.SUCCESS_DARKBX.UI.Button.Color.SUCCESS_LIGHTBX.UI.Button.Color.PRIMARY_DARKBX.UI.Button.Color.PRIMARYBX.UI.Button.Color.SECONDARYBX.UI.Button.Color.LINKBX.UI.Button.Color.LIGHTBX.UI.Button.Color.LIGHT_BORDER
Состояния
Кнопка может иметь состояние. Например, быть активной или заблокированной. Опцияstate и перечисление BX.UI.Button.State управляют этой возможностью.
var button = new BX.UI.Button({
text: "Привет, кнопка!",
state: BX.UI.Button.State.DISABLED
});
Допустимые значения BX.UI.Button.State:
BX.UI.Button.State.HOVER— состояние при наведении мышиBX.UI.Button.State.ACTIVE— состояние при нажатииBX.UI.Button.State.DISABLED— заблокированоBX.UI.Button.State.CLOCKING— ожидание в виде "часиков"BX.UI.Button.State.WAITING— ожидание в виде "спиннера"
Тег кнопки
По умолчанию кнопка отображается с помощью тега <button>. С помощью параметра tag и перечисления BX.UI.Button.Tag кнопка может стать ссылкой или input-элементом.
var button = new BX.UI.Button({
text: "Привет, кнопка!",
tag: BX.UI.Button.Tag.LINK
});
Допустимые значения BX.UI.Button.Tag:
BX.UI.Button.Tag.BUTTON— тег<button>BX.UI.Button.Tag.LINK— тег<a>BX.UI.Button.Tag.SUBMIT— тег<input type="submit">BX.UI.Button.Tag.INPUT— тег<input type="button">
Иконка
Для создания кнопок с иконкой используется параметр icon и перечисление BX.UI.Button.Icon.
var button = new BX.UI.Button({
text: "Привет, кнопка!",
icon: BX.UI.Button.Icon.INFO
});
Допустимые значения BX.UI.Button.Icon:
BX.UI.Button.Icon.UNFOLLOWBX.UI.Button.Icon.FOLLOWBX.UI.Button.Icon.ADDBX.UI.Button.Icon.STOPBX.UI.Button.Icon.STARTBX.UI.Button.Icon.PAUSEBX.UI.Button.Icon.ADD_FOLDERBX.UI.Button.Icon.SETTINGBX.UI.Button.Icon.TASKBX.UI.Button.Icon.INFOBX.UI.Button.Icon.SEARCHBX.UI.Button.Icon.PRINTBX.UI.Button.Icon.LISTBX.UI.Button.Icon.BUSINESSBX.UI.Button.Icon.BUSINESS_CONFIRMBX.UI.Button.Icon.BUSINESS_WARNINGBX.UI.Button.Icon.CAMERABX.UI.Button.Icon.PHONE_UPBX.UI.Button.Icon.PHONE_DOWNBX.UI.Button.Icon.PHONE_CALLBX.UI.Button.Icon.BACKBX.UI.Button.Icon.REMOVEBX.UI.Button.Icon.DOWNLOADBX.UI.Button.Icon.DONEBX.UI.Button.Icon.DISKBX.UI.Button.Icon.LOCKBX.UI.Button.Icon.MAILBX.UI.Button.Icon.CHATBX.UI.Button.Icon.PAGEBX.UI.Button.Icon.CLOUDBX.UI.Button.Icon.EDITBX.UI.Button.Icon.SHARE
HTML-атрибуты
Опция props позволяет установить произвольные HTML-атрибуты кнопки. Например, href для кнопки-ссылки или data-атрибут.
var button = new BX.UI.Button({
text: "Подключить",
size: BX.UI.Button.Size.LARGE,
tag: BX.UI.Button.Tag.LINK,
color: BX.UI.Button.Color.LIGHT_BORDER,
props: {
href: "/",
id: "my-link-id",
"data-role": "action"
}
});
Также можно установить свой CSS класс-модификатор.
var button = new BX.UI.Button({
text: "Подключить",
className: "my-button"
});
Обработка событий
Основное предназначение кнопок — это выполнение некоторого действия после нажатия. Если кнопка представляет собой ссылку, то достаточно определить атрибут href (см. пример выше). В остальных случаях требуется написать обработчик нажатия в параметре onclick.
var button = new BX.UI.Button({
text: "Активировать",
size: BX.UI.Button.Size.LARGE,
color: BX.UI.Button.Color.SUCCESS,
onclick: function(button, event) {
if (button.isActive())
{
button.setText("Активировать");
button.setActive(false);
}
else
{
button.setText("Деактивировать");
button.setActive();
}
}
});
Обработчик получает два аргумента: объект кнопки button (экземпляр класса BX.UI.Button) и объект нажатия мыши event.
Для установки других браузерных событий используется опция events.
var button = new BX.UI.Button({
text: "Нажми меня",
size: BX.UI.Button.Size.LARGE,
color: BX.UI.Button.Color.SUCCESS,
events: {
click: function(button, event) {
button.setActive(!button.isActive());
console.log("click", button, event);
},
mouseenter: function(button, event) {
console.log("mouseenter", button, event);
},
mouseout: function(button, event) {
console.log("mouseout", button, event);
}
}
});
Круглая и Dropdown кнопки
Для создания круглой кнопки необходимо установить параметр round в значение true.
var button = new BX.UI.Button({
text: "Круглая кнопка",
color: BX.UI.Button.Color.PRIMARY,
round: true
});
Опция dropdown=true добавляет иконку в виде стрелки справа от названия кнопки. Такой внешний вид предполагает показ меню после нажатия.
var button = new BX.UI.Button({
text: "Dropdown",
color: BX.UI.Button.Color.PRIMARY,
dropdown: true
});
Меню
Одним из стандартных сценариев использования кнопок является показ контекстного меню после нажатия. Параметр menu определяет те же самые настройки, что и класс BX.PopupMenuWindow. Кнопка автоматически становится активной после открытия меню и неактивной, когда меню закрыто.
var button = new BX.UI.Button({
text: "Меню",
color: BX.UI.Button.Color.PRIMARY,
dropdown: true,
menu: {
items: [
{ text: "Детальное описание", href: "/path/to/page" },
{ text: "Редактировать", disabled: true },
{
text: "Перенести",
onclick: function(event, item) {
alert("Обработка нажатия на пункт");
}
},
{ delimiter: true },
{
text: "Закрыть",
onclick: function(event, item) {
item.getMenuWindow().close();
}
}
],
closeByEsc: true,
offsetTop: 5,
},
});
Двойная кнопка
Для создания двойной кнопки используется класс BX.UI.SplitButton. Он является наследником класса BX.UI.Button, поэтому настройки размера, цвета и иконки совпадают с настройками обычной кнопки.
var splitButton = new BX.UI.SplitButton({
text: "Добавить",
color: BX.UI.Button.Color.PRIMARY,
size: BX.UI.Button.Size.LARGE,
icon: BX.UI.Button.Icon.BUSINESS
});
Однако состояние двойной кнопки определяется перечислением BX.UI.SplitButton.State.
var splitButton = new BX.UI.SplitButton({
text: "Добавить",
color: BX.UI.Button.Color.PRIMARY,
size: BX.UI.Button.Size.LARGE,
icon: BX.UI.Button.Icon.BUSINESS,
state: BX.UI.SplitButton.State.MENU_ACTIVE
});
Допустимые значения BX.UI.SplitButton.State:
BX.UI.SplitButton.State.HOVERBX.UI.SplitButton.State.MAIN_HOVERBX.UI.SplitButton.State.MENU_HOVERBX.UI.SplitButton.State.ACTIVEBX.UI.SplitButton.State.MAIN_ACTIVEBX.UI.SplitButton.State.MENU_ACTIVEBX.UI.SplitButton.State.DISABLEDBX.UI.SplitButton.State.MAIN_DISABLEDBX.UI.SplitButton.State.MENU_DISABLEDBX.UI.SplitButton.State.CLOCKINGBX.UI.SplitButton.State.WAITING
Параметры можно указывать как для целой кнопки, так и для отдельных ее частей. В опциях mainButton и menuButton задаются идивидуальные настройки основной и дополнительной кнопки.
var splitButton = new BX.UI.SplitButton({
text: "Добавить",
color: BX.UI.Button.Color.PRIMARY,
size: BX.UI.Button.Size.LARGE,
icon: BX.UI.Button.Icon.BUSINESS,
mainButton: {
props: {
href: "/"
},
tag: BX.UI.Button.Tag.LINK
},
menuButton: {
onclick: function(button, event) {
button.setActive(!button.isActive());
},
props: {
"data-abc": "123"
},
events: {
mouseenter: function(button, event) {
console.log("menu button mouseenter", button, event);
}
},
},
});
Обработчики событий в первом аргументе получают объект класса BX.UI.SplitSubButton.
Стандартные кнопки
Для типовых кнопок "Сохранить", "Применить", "Отмена" и др. существуют вспомогательные классы. Эти классы предустанавливают цвет и текст кнопки.
Вспомогательные классы обычной кнопки (наследники BX.UI.Button):
BX.UI.SaveButtonBX.UI.CreateButtonBX.UI.AddButtonBX.UI.SendButtonBX.UI.ApplyButtonBX.UI.CancelButtonBX.UI.CloseButton
Вспомогательные классы двойной кнопки (наследники BX.UI.SplitButton):
BX.UI.SaveSplitButtonBX.UI.CreateSplitButtonBX.UI.AddSplitButtonBX.UI.SendSplitButtonBX.UI.ApplySplitButtonBX.UI.CancelSplitButtonBX.UI.CloseSplitButton
Любое предустановленное значение можно переопределить.
var button = new BX.UI.SaveButton({
color: BX.UI.Button.Color.PRIMARY
});