Диалоговые окна в mdui — это универсальные компоненты, которые часто используются для запроса информации, уведомления или предупреждения пользователей.
В один момент времени может быть открыто только одно диалоговое окно. Если открыть следующее окно до закрытия текущего, оно будет поставлено в очередь и откроется после закрытия текущего.
<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. |
Инициализация компонента:
// selector — это CSS-селектор диалогового окна, DOM-элемент или HTML-строка
// options — это параметры конфигурации, см. список параметров ниже
var inst = new mdui.Dialog(selector, options);| Имя параметра | Тип | По умолчанию | Описание |
|---|---|---|---|
overlay | boolean | true | Отображать ли маску (overlay) при открытии диалогового окна. |
history | boolean | true | Добавлять ли URL-хэш при открытии. Если true, окно можно закрыть кнопкой «Назад» в браузере или на Android. |
modal | boolean | false | Является ли диалоговое окно модальным. Если false, окно закроется при клике вне его области. |
closeOnEsc | boolean | true | Закрывать ли диалоговое окно при нажатии клавиши Esc. |
closeOnCancel | boolean | true | Закрывать ли диалоговое окно при нажатии кнопки отмены. |
closeOnConfirm | boolean | true | Закрывать ли диалоговое окно при нажатии кнопки подтверждения. |
destroyOnClosed | boolean | false | Автоматически уничтожать экземпляр диалогового окна после его закрытия. |
| Имя метода | Описание |
|---|---|
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.alert(), mdui.confirm() и mdui.prompt() реализованы на его основе.
mdui.dialog(options)mdui.dialog({
title: 'title',
content: 'content',
buttons: [
{
text: 'Отмена'
},
{
text: 'Подтвердить',
onClick: function(inst){
mdui.alert('Обратный вызов при нажатии кнопки подтверждения');
}
}
]
});Параметр
| Имя параметра | Тип | По умолчанию | Описание |
|---|---|---|---|
title | string | Заголовок диалогового окна. | |
content | string | Содержимое диалогового окна. | |
buttons | array | Массив кнопок, каждая из которых является объектом с параметрами (см. таблицу ниже). | |
stackedButtons | boolean | false | Должны ли кнопки располагаться вертикально. |
cssClass | string | CSS-классы, добавляемые к .mdui-dialog. | |
history | boolean | true | Отслеживать ли событие hashchange. Если true, окно можно закрыть кнопкой «Назад» на Android или в браузере. |
overlay | boolean | true | Отображать ли маску при открытии диалогового окна. |
modal | boolean | false | Является ли диалоговое окно модальным. Если false, окно закроется при клике вне его области. |
closeOnEsc | boolean | true | Закрывать ли диалоговое окно при нажатии клавиши Esc. |
destroyOnClosed | boolean | true | Автоматически уничтожать экземпляр диалогового окна после его закрытия. |
onOpen | function | Обратный вызов в начале анимации открытия. Аргумент — экземпляр окна. | |
onOpened | function | Обратный вызов после завершения анимации открытия. Аргумент — экземпляр окна. | |
onClose | function | Обратный вызов в начале анимации закрытия. Аргумент — экземпляр окна. | |
onClosed | function | Обратный вызов после завершения анимации закрытия. Аргумент — экземпляр окна. |
Параметры кнопки:
| Имя параметра | Тип | По умолчанию | Описание |
|---|---|---|---|
text | string | Текст кнопки. | |
bold | boolean | false | Сделать ли текст кнопки жирным. |
close | boolean | true | Закрывать ли диалоговое окно после нажатия на кнопку. |
onClick | function | Функция обратного вызова при нажатии на кнопку. |
Открывает окно предупреждения, которое может содержать заголовок, текст и кнопку подтверждения:
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: (опционально) параметры, см. таблицу ниже.| Имя параметра | Тип | По умолчанию | Описание |
|---|---|---|---|
confirmText | string | ok | Текст кнопки подтверждения. |
history | boolean | true | Отслеживать ли событие hashchange. Если true, окно можно закрыть кнопкой «Назад» на Android или в браузере. |
modal | boolean | false | Является ли диалоговое окно модальным. Если false, окно закроется при клике вне его области. |
closeOnEsc | boolean | true | Закрывать ли диалоговое окно при нажатии клавиши Esc. |
closeOnConfirm | boolean | true | Закрывать ли диалоговое окно при нажатии кнопки подтверждения. |
Открывает окно подтверждения, которое может содержать заголовок, текст, кнопку подтверждения и кнопку отмены:
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: (опционально) параметры, см. таблицу ниже.| Имя параметра | Тип | По умолчанию | Описание |
|---|---|---|---|
confirmText | string | ok | Текст кнопки подтверждения. |
cancelText | string | cancel | Текст кнопки отмены. |
history | boolean | true | Отслеживать ли событие hashchange. Если true, окно можно закрыть кнопкой «Назад» на Android или в браузере. |
modal | boolean | false | Является ли диалоговое окно модальным. Если false, окно закроется при клике вне его области. |
closeOnEsc | boolean | true | Закрывать ли диалоговое окно при нажатии клавиши Esc. |
closeOnCancel | boolean | true | Закрывать ли диалоговое окно при нажатии кнопки отмены. |
closeOnConfirm | boolean | true | Закрывать ли диалоговое окно при нажатии кнопки подтверждения. |
Открывает диалоговое окно для ввода текста пользователем, которое может содержать заголовок, текст, текстовое поле, кнопку подтверждения и кнопку отмены:
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: (опционально) параметры, см. таблицу ниже.| Имя параметра | Тип | По умолчанию | Описание |
|---|---|---|---|
confirmText | string | ok | Текст кнопки подтверждения |
cancelText | string | cancel | Текст кнопки отмены |
history | boolean | true | Отслеживать ли событие hashchange. Если true, окно можно закрыть кнопкой «Назад» на Android или в браузере. |
modal | boolean | false | Является ли диалоговое окно модальным. Если false, окно закроется при клике вне его области. |
closeOnEsc | boolean | true | Закрывать ли диалоговое окно при нажатии клавиши Esc. |
closeOnCancel | boolean | true | Закрывать ли диалоговое окно при нажатии кнопки отмены. |
closeOnConfirm | boolean | true | Закрывать ли диалоговое окно при нажатии кнопки подтверждения. |
confirmOnEnter | boolean | false | Вызывать onConfirm при нажатии клавиши Enter. |
type | string | text | Тип текстового поля.
|
maxlength | int | 0 | Максимальное количество символов для ввода |
defaultValue | string | '' | Значение текстового поля по умолчанию |
| Имя класса | Описание |
|---|---|
.mdui-dialog | Определяет компонент диалогового окна. |
.mdui-dialog-title | Определяет заголовок диалогового окна. |
.mdui-dialog-content | Определяет содержимое диалогового окна. |
.mdui-dialog-actions | Определяет панель действий диалогового окна. |
.mdui-dialog-actions-stacked | Располагает кнопки на панели действий вертикально. |