menuMDUIDocs
color_lens
Новый mdui 2 на базе Material Design 3 и Web Components уже здесь. Перейти к документации mdui 2.

Диалоги

Диалоговые окна в mdui — это универсальные компоненты, которые часто используются для запроса информации, уведомления или предупреждения пользователей.

В один момент времени может быть открыто только одно диалоговое окно. Если открыть следующее окно до закрытия текущего, оно будет поставлено в очередь и откроется после закрытия текущего.

Использование

  1. Вызов через атрибуты
  2. Вызов через JavaScript

Стиль

Стандартное диалоговое окно

Это стандартное диалоговое окно.

Пример
<div class="mdui-dialog">
  <div class="mdui-dialog-title">Are you sure?</div>
  <div class="mdui-dialog-content">You'll lose all photos and media!</div>
  <div class="mdui-dialog-actions">
    <button class="mdui-btn mdui-ripple">cancel</button>
    <button class="mdui-btn mdui-ripple">erase</button>
  </div>
</div>

Без заголовка

Это диалоговое окно не содержит заголовка.

Пример
<div class="mdui-dialog">
  <div class="mdui-dialog-content">Discard draft?</div>
  <div class="mdui-dialog-actions">
    <button class="mdui-btn mdui-ripple">cancel</button>
    <button class="mdui-btn mdui-ripple">discard</button>
  </div>
</div>

Вертикальные кнопки

Кнопки в нижней части диалогового окна по умолчанию располагаются горизонтально. Достаточно добавить класс .mdui-dialog-actions-stacked к <div class="mdui-dialog-actions"></div>, чтобы расположить кнопки вертикально.

Пример
<div class="mdui-dialog">
  <div class="mdui-dialog-title">Use Google's location service?</div>
  <div class="mdui-dialog-content">Let Google help apps determine location. This means sending anonymous location data to Google, even when no apps are running.</div>
  <div class="mdui-dialog-actions mdui-dialog-actions-stacked">
    <button class="mdui-btn mdui-ripple">turn on speed boost</button>
    <button class="mdui-btn mdui-ripple">no thanks</button>
  </div>
</div>

Фиксированный заголовок и кнопки

Когда содержимое диалогового окна превышает его высоту, в .mdui-dialog-content появляется полоса прокрутки.

Если поместить .mdui-dialog-title и .mdui-dialog-actions внутрь .mdui-dialog-content, заголовок и нижние кнопки будут прокручиваться вместе с содержимым; в противном случае они будут зафиксированы сверху и снизу соответственно.

Пример
<div class="mdui-dialog">
  <div class="mdui-dialog-content">
    <div class="mdui-dialog-title">Use Google's location service?</div>
    Let Google help apps determine location. This means sending anonymous location data to Google, even when no apps are running.
    <br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test
  </div>
  <div class="mdui-dialog-actions">
    <button class="mdui-btn mdui-ripple">no thanks</button>
    <button class="mdui-btn mdui-ripple">turn on speeboost</button>
  </div>
</div>

Произвольное содержимое

В диалоговом окне обязательным является только элемент <div class="mdui-dialog"></div>, его содержимое может быть заменено любым HTML-кодом.

В примере ниже в диалоговое окно помещены вкладки:

Пример
<div class="mdui-dialog" id="example-4">
  <div class="mdui-tab mdui-tab-full-width" id="example4-tab">
    <a href="#example4-tab1" class="mdui-ripple">web</a>
    <a href="#example4-tab2" class="mdui-ripple">shopping</a>
    <a href="#example4-tab3" class="mdui-ripple">videos</a>
  </div>
  <div id="example4-tab1" class="mdui-p-a-2">
    <p>tab 1</p>
    <p>tab 1</p>
    <p>tab 1</p>
    <p>tab 1</p>
    <p>tab 1</p>
    <p>tab 1</p>
  </div>
  <div id="example4-tab2" class="mdui-p-a-2">
    <p>tab 2</p>
    <p>tab 2</p>
    <p>tab 2</p>
    <p>tab 2</p>
    <p>tab 2</p>
    <p>tab 2</p>
  </div>
  <div id="example4-tab3" class="mdui-p-a-2">
    <p>tab 3</p>
    <p>tab 3</p>
    <p>tab 3</p>
    <p>tab 3</p>
    <p>tab 3</p>
    <p>tab 3</p>
  </div>
</div>

<script>
  var tab = new mdui.Tab('#example4-tab');
  document.getElementById('example-4').addEventListener('open.mdui.dialog', function () {
    tab.handleUpdate();
  });
</script>

Использование

Вызов через атрибуты

В этом случае писать JavaScript-код не требуется. Достаточно добавить атрибут mdui-dialog="options" к управляющему элементу (например, к кнопке). При вызове через пользовательские атрибуты необходимо также добавить параметр target, указывающий на целевое диалоговое окно (его значением должен быть CSS-селектор диалогового окна).

Пример
<button class="mdui-btn mdui-ripple mdui-color-theme-accent" mdui-dialog="{target: '#exampleDialog'}">open</button>

<div class="mdui-dialog" id="exampleDialog">
  <div class="mdui-dialog-title">Are you sure?</div>
  <div class="mdui-dialog-content">You'll lose all photos and media!</div>
  <div class="mdui-dialog-actions">
    <button class="mdui-btn mdui-ripple" mdui-dialog-close>cancel</button>
    <button class="mdui-btn mdui-ripple" mdui-dialog-confirm>erase</button>
  </div>
</div>

К элементам внутри диалогового окна можно добавлять атрибуты для привязки событий. Эти атрибуты также работают при вызове через JavaScript.

АтрибутОписание
mdui-dialog-closeНажатие на этот элемент вызывает событие close.mdui.dialog и закрывает диалоговое окно.
mdui-dialog-cancelНажатие на этот элемент вызывает событие cancel.mdui.dialog.
mdui-dialog-confirmНажатие на этот элемент вызывает событие confirm.mdui.dialog.

Вызов через JavaScript

Инициализация компонента:

// selector — это CSS-селектор диалогового окна, DOM-элемент или HTML-строка
// options — это параметры конфигурации, см. список параметров ниже
var inst = new mdui.Dialog(selector, options);
Запуск

Параметр

Имя параметраТипПо умолчаниюОписание
overlaybooleantrueОтображать ли маску (overlay) при открытии диалогового окна.
historybooleantrueДобавлять ли URL-хэш при открытии. Если true, окно можно закрыть кнопкой «Назад» в браузере или на Android.
modalbooleanfalseЯвляется ли диалоговое окно модальным. Если false, окно закроется при клике вне его области.
closeOnEscbooleantrueЗакрывать ли диалоговое окно при нажатии клавиши Esc.
closeOnCancelbooleantrueЗакрывать ли диалоговое окно при нажатии кнопки отмены.
closeOnConfirmbooleantrueЗакрывать ли диалоговое окно при нажатии кнопки подтверждения.
destroyOnClosedbooleanfalseАвтоматически уничтожать экземпляр диалогового окна после его закрытия.

Метод

Имя методаОписание
open()Открыть диалоговое окно.
close()Закрыть диалоговое окно.
toggle()Переключить состояние (открыто/закрыто) диалогового окна.
getState()Получить состояние диалогового окна. Всего четыре состояния (opening, opened, closing, closed).
destroy()Уничтожить диалоговое окно.
handleUpdate()Пересчитать положение диалогового окна и высоту полосы прокрутки. Вызывайте этот метод, если содержимое окна изменилось после открытия.

Событие

Имя событияОписаниеЦельПараметры
open.mdui.dialogСобытие срабатывает, когда начинается анимация открытия диалогового окна.<div class="mdui-dialog"></div>event._detail.inst: экземпляр
opened.mdui.dialogСобытие срабатывает, когда анимация открытия диалогового окна завершена.
close.mdui.dialogСобытие срабатывает, когда начинается анимация закрытия диалогового окна.
closed.mdui.dialogСобытие срабатывает, когда анимация закрытия диалогового окна завершена.
cancel.mdui.dialogСобытие срабатывает при нажатии кнопки отмены.
confirm.mdui.dialogСобытие срабатывает при нажатии кнопки подтверждения.

Предопределённые диалоговые окна

mdui предоставляет несколько предопределённых функций для часто используемых сценариев. Эти окна вызываются только через JavaScript и не требуют написания HTML-кода.

Все эти функции возвращают экземпляр диалогового окна.

mdui.dialog()

Открывает диалоговое окно, в котором заголовок, содержимое, кнопки и прочее могут быть настроены. Этот метод является универсальным, mdui.alert(), mdui.confirm() и mdui.prompt() реализованы на его основе.

mdui.dialog(options)
Пример
mdui.dialog({
  title: 'title',
  content: 'content',
  buttons: [
    {
      text: 'Отмена'
    },
    {
      text: 'Подтвердить',
      onClick: function(inst){
        mdui.alert('Обратный вызов при нажатии кнопки подтверждения');
      }
    }
  ]
});

Параметр

Имя параметраТипПо умолчаниюОписание
titlestringЗаголовок диалогового окна.
contentstringСодержимое диалогового окна.
buttonsarrayМассив кнопок, каждая из которых является объектом с параметрами (см. таблицу ниже).
stackedButtonsbooleanfalseДолжны ли кнопки располагаться вертикально.
cssClassstringCSS-классы, добавляемые к .mdui-dialog.
historybooleantrueОтслеживать ли событие hashchange. Если true, окно можно закрыть кнопкой «Назад» на Android или в браузере.
overlaybooleantrueОтображать ли маску при открытии диалогового окна.
modalbooleanfalseЯвляется ли диалоговое окно модальным. Если false, окно закроется при клике вне его области.
closeOnEscbooleantrueЗакрывать ли диалоговое окно при нажатии клавиши Esc.
destroyOnClosedbooleantrueАвтоматически уничтожать экземпляр диалогового окна после его закрытия.
onOpenfunctionОбратный вызов в начале анимации открытия. Аргумент — экземпляр окна.
onOpenedfunctionОбратный вызов после завершения анимации открытия. Аргумент — экземпляр окна.
onClosefunctionОбратный вызов в начале анимации закрытия. Аргумент — экземпляр окна.
onClosedfunctionОбратный вызов после завершения анимации закрытия. Аргумент — экземпляр окна.

Параметры кнопки:

Имя параметраТипПо умолчаниюОписание
textstringТекст кнопки.
boldbooleanfalseСделать ли текст кнопки жирным.
closebooleantrueЗакрывать ли диалоговое окно после нажатия на кнопку.
onClickfunctionФункция обратного вызова при нажатии на кнопку.

mdui.alert()

Открывает окно предупреждения, которое может содержать заголовок, текст и кнопку подтверждения:

mdui.alert(text, onConfirm, options)
mdui.alert(text, title, onConfirm, options)
Пример
// Только текст
mdui.alert('content');

// С заголовком и текстом
mdui.alert('content', 'title');

// С обратным вызовом
mdui.alert('content', 'title', function() {
  mdui.alert('Нажата кнопка подтверждения');
});

// С текстом и обратным вызовом
mdui.alert('content', function() {
  mdui.alert('Нажата кнопка подтверждения');
});
  • text: текст
  • title: (опционально) заголовок
  • onConfirm: (опционально) обратный вызов при нажатии кнопки подтверждения. Аргумент — экземпляр окна.
  • options: (опционально) параметры, см. таблицу ниже.
Имя параметраТипПо умолчаниюОписание
confirmTextstringokТекст кнопки подтверждения.
historybooleantrueОтслеживать ли событие hashchange. Если true, окно можно закрыть кнопкой «Назад» на Android или в браузере.
modalbooleanfalseЯвляется ли диалоговое окно модальным. Если false, окно закроется при клике вне его области.
closeOnEscbooleantrueЗакрывать ли диалоговое окно при нажатии клавиши Esc.
closeOnConfirmbooleantrueЗакрывать ли диалоговое окно при нажатии кнопки подтверждения.

mdui.confirm()

Открывает окно подтверждения, которое может содержать заголовок, текст, кнопку подтверждения и кнопку отмены:

mdui.confirm(text, onConfirm, onCancel, options)
mdui.confirm(text, title, onConfirm, onCancel, options)
Пример
// С текстом и обратным вызовом подтверждения
mdui.confirm('content', function(){
  mdui.alert('Нажата кнопка подтверждения');
});

// С текстом, обратными вызовами подтверждения и отмены
mdui.confirm('content',
  function(){
    mdui.alert('Нажата кнопка подтверждения');
  },
  function(){
    mdui.alert('Нажата кнопка отмены');
  }
);

// С текстом, заголовком и обратным вызовом подтверждения
mdui.confirm('content', 'title', function(){
  mdui.alert('Нажата кнопка подтверждения');
});

// С текстом, заголовком, обратными вызовами подтверждения и отмены
mdui.confirm('content', 'title',
  function(){
    mdui.alert('Нажата кнопка подтверждения');
  },
  function(){
    mdui.alert('Нажата кнопка отмены');
  }
);
  • text: текст
  • title: (опционально) заголовок
  • onConfirm: (опционально) обратный вызов при нажатии кнопки подтверждения. Аргумент — экземпляр окна.
  • onCancel: (опционально) обратный вызов при нажатии кнопки отмены. Аргумент — экземпляр окна.
  • options: (опционально) параметры, см. таблицу ниже.
Имя параметраТипПо умолчаниюОписание
confirmTextstringokТекст кнопки подтверждения.
cancelTextstringcancelТекст кнопки отмены.
historybooleantrueОтслеживать ли событие hashchange. Если true, окно можно закрыть кнопкой «Назад» на Android или в браузере.
modalbooleanfalseЯвляется ли диалоговое окно модальным. Если false, окно закроется при клике вне его области.
closeOnEscbooleantrueЗакрывать ли диалоговое окно при нажатии клавиши Esc.
closeOnCancelbooleantrueЗакрывать ли диалоговое окно при нажатии кнопки отмены.
closeOnConfirmbooleantrueЗакрывать ли диалоговое окно при нажатии кнопки подтверждения.

mdui.prompt()

Открывает диалоговое окно для ввода текста пользователем, которое может содержать заголовок, текст, текстовое поле, кнопку подтверждения и кнопку отмены:

mdui.prompt(label, onConfirm, onCancel, options)
mdui.prompt(label, title, onConfirm, onCancel, options)
Пример
// Однострочное текстовое поле
mdui.prompt('Это однострочное текстовое поле',
  function (value) {
    mdui.alert('Вы ввели:' + value + ', Нажата кнопка подтверждения');
  },
  function (value) {
    mdui.alert('Вы ввели:' + value + ', Нажата кнопка отмены');
  }
);

// Многострочное текстовое поле
mdui.prompt('Это многострочное текстовое поле',
  function (value) {
    mdui.alert('Вы ввели:' + value + ', Нажата кнопка подтверждения');
  },
  function (value) {
    mdui.alert('Вы ввели:' + value + ', Нажата кнопка отмены');
  },
  {
    type: 'textarea'
  }
);

// С заголовком
mdui.prompt('Введите текст', 'title',
  function (value) {
    mdui.alert('Вы ввели:' + value + ', Нажата кнопка подтверждения');
  },
  function (value) {
    mdui.alert('Вы ввели:' + value + ', Нажата кнопка отмены');
  }
);
  • label: текст плавающей метки (label) текстового поля
  • title: (опционально) заголовок
  • onConfirm: (опционально) обратный вызов при нажатии кнопки подтверждения. Принимает два аргумента: значение поля и экземпляр окна.
  • onCancel: (опционально) обратный вызов при нажатии кнопки отмены. Принимает два аргумента: значение поля и экземпляр окна.
  • options: (опционально) параметры, см. таблицу ниже.
Имя параметраТипПо умолчаниюОписание
confirmTextstringokТекст кнопки подтверждения
cancelTextstringcancelТекст кнопки отмены
historybooleantrueОтслеживать ли событие hashchange. Если true, окно можно закрыть кнопкой «Назад» на Android или в браузере.
modalbooleanfalseЯвляется ли диалоговое окно модальным. Если false, окно закроется при клике вне его области.
closeOnEscbooleantrueЗакрывать ли диалоговое окно при нажатии клавиши Esc.
closeOnCancelbooleantrueЗакрывать ли диалоговое окно при нажатии кнопки отмены.
closeOnConfirmbooleantrueЗакрывать ли диалоговое окно при нажатии кнопки подтверждения.
confirmOnEnterbooleanfalseВызывать onConfirm при нажатии клавиши Enter.
typestringtextТип текстового поля.
  • text: однострочное текстовое поле
  • textarea: многострочное текстовое поле
maxlengthint0Максимальное количество символов для ввода
defaultValuestring''Значение текстового поля по умолчанию

Список CSS-классов

Имя классаОписание
.mdui-dialogОпределяет компонент диалогового окна.
.mdui-dialog-titleОпределяет заголовок диалогового окна.
.mdui-dialog-contentОпределяет содержимое диалогового окна.
.mdui-dialog-actionsОпределяет панель действий диалогового окна.
.mdui-dialog-actions-stackedРасполагает кнопки на панели действий вертикально.