Полный цикл в digital

Модальное окно, функция BX.PopupWindow ()

Модальные окна, неотъемлемая часть современного интерфейса. Битрикс предоставляет мощный и гибкий JS-класс BX.PopupWindow для их создания и управления модальными окнами.

Базовое создание окна

Создадим кнопку, при клике на которую будет появлятся модальное окно:

<button id="show-popup-btn">Показать окно</button>

Подключим скрипт:

BX.ready(function() {
    var popupButton = BX('show-popup-btn');

    BX.bind(popupButton, 'click', function() {
        // создаем объект окна
        var myPopup = new BX.PopupWindow(
            // уникальный id DOM-элемента, в который будет обернуто окно. Если на странице будет 2 и больше окон такого плана, у каждого должен быть свой id
            'my_unique_popup_id',
            // параметр принадлежности окна к какому-либо DOM-элементу на странице. По дефолту окно всплывает в центре страницы. Хотите чтоб всплывало, рядом с какой-либо кнопкой, ставьте суда id элемента в виде BX('my_name_div')
            null,
            {
                // контентная часть
                content: '<div>Это контент моего первого всплывающего окна!</div>',
                // определяет, нужна ли вам иконка закрытия окна и ее положение
                closeIcon: {right: "20px", top: "10px"},
                // заголовок окна
                titleBar: 'Заголовок окна',
                // эти параметры указывают, что окно можно передвигать по странице
                zIndex: 0,
                offsetLeft: 0,
                offsetTop: 0,
                // разрешаем перетаскивание
                draggable: {restrict: true},
                // кнопки для управления содержимым окна. На каждую кнопку создаем новый объект new BX.PopupWindowButton с параметрами
                buttons: [
                    new BX.PopupWindowButton({
                        // текст кнопки
                        text: 'Закрыть',
                        // класс кнопки
                        className: 'popup-window-button-accept',
                        // событие для кнопки
                        events: {
                            click: function() {
                                // закрываем окно
                                this.popupWindow.close();
                            }
                        }
                    })
                ]
            }
        );

        // показываем окно
        myPopup.show();
    });
});

Управление окном

После создания объект окна можно получить через BX.WindowManager.Get() и управлять им:

// получаем ранее созданное окно по его ID
let existingPopup = BX.WindowManager.Get('my_unique_popup_id');

if (existingPopup) {
    // закрыть окно
    existingPopup.close();

    // изменить контент
    existingPopup.setContent('Новое содержимое!');

    // изменить заголовок
    existingPopup.setTitleBar('Новый заголовок');
}

Загрузка контента через AJAX

Часто контент для модального окна нужно подгружать с сервера. BX.PopupWindow отлично интегрируется с BX.ajax.

В этом примере по клику на кнопку создается пустое окно с надписью Загрузка…, отправляется AJAX запрос, и после получения ответа контент окна заменяется на HTML, пришедший с сервера:

BX.ready(function() {
    BX.bind(BX('load-data-btn'), 'click', function(e) {
        // получаем ID из data-атрибута кнопки
        let elementId = this.dataset.id;

        var popup = new BX.PopupWindow('ajax-popup', null, {
            // прелоадер
            content: 'Загрузка...',
            closeIcon: true,
            titleBar: 'Информация об элементе'
        });

        popup.show();

        // Ajax запрос в компонент
        BX.ajax.runAction('my.module:controller.action', {
            data: { id: elementId }
        }).then(function(response) {
            // вставляем полученный HTML в окно
            popup.setContent(response.data.html);
        }, function(response) {
            // в случае ошибки, выводим
            popup.setContent('Ошибка: ' + response.errors[0].message);
        });

        return BX.PreventDefault(e);
    });
});
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!