Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   модальные окна на сайте. (https://javascript.ru/forum/dom-window/21793-modalnye-okna-na-sajjte.html)

melky 24.09.2011 16:33

модальные окна на сайте.
 
они есть везде : на фейсбуке, на почти каждой домашнеё странице, на юкозе.

и у меня они есть, несомненно :)

встал вопрос - а как лучше реализовать модальные окна на сайте?

исследовав этот вопрос, я изрёк такую мысль :
Цитата:

Пользователю никогда не показывается более одного модального окна. Модальные окна похожи между собой по строкутуре HTML, различия только в заголовках, контентах, кнопках и доп. атрибутах (цвет,размер).

Так зачем каждый раз создавать новое модальное окно, прописывать ему стили и дочерние элементы плюс дополнительные атрибуты ?

Я пришёл к выводу, что :
  • Модальное окно не удаляется со страницы и не создаётся заново
  • Оно всегда присутствует на странице
  • При показе модального окна будут изменяться его атрибуты (заголовок и т.д), а потом оно будет показываться.
  • При скрытии модального окна ничего не происходит, кроме скрытия самого окна.

Модальное окно по-умолчанию скрыто, это - обычный элемент на странице с динамическим содержимым.

Я попытался использовать MVC : ведь если окно всегда на странице, то его внешний вид может изменить верстальщик, сразу на странице, вместо того, чтобы лезть в код.

Скрипту соотв. передаются элементы оверлея, модального окра, его заголовка и т.д.

Я хотел бы услышать от вас, чем эта модель плоха, или как ещё можно реализовать модальные окна на сайте.


PS. показать модальное окно, если оно уже показано, нельзя. это уже интерфейс.

Serg_pnz 24.09.2011 18:36

Надо смотреть по ситуации: модальное окно уничтожается и создается снова. Ведь не факт, что пользователь вообще им воспользуется, а по Вашей схеме код придется таскать. Опять же оверлей - а если аккордион на странице? Тогда каждый раз пересчитывать размер оверлея при показе окна?

melky 24.09.2011 19:15

Цитата:

Сообщение от Serg_pnz (Сообщение 127925)
Ведь не факт, что пользователь вообще им воспользуется, а по Вашей схеме код придется таскать.

50\50. но он встроен в страницу, и этого не избежать.

если вы говорите про загружаемый объём, то создание такого модального окна через js будет тяжелее весить, чем это окно через html.

Цитата:

Сообщение от Serg_pnz (Сообщение 127925)
Опять же оверлей - а если аккордион на странице? Тогда каждый раз пересчитывать размер оверлея при показе окна?

нет. размеры оверлея определяются через css.

Serg_pnz 24.09.2011 20:33

Хотя да. Саму конструкцию таскаем, а инфу обновляем по открытии.

Kolyaj 24.09.2011 23:18

Приведите ситуацию, когда без модального окна не обойтись.

З.Ы. Модальные окна -- зло.

Serg_pnz 25.09.2011 13:12

Галерея, "алерт", опросник, регистрация - бывает и не обойтись.

Kolyaj 25.09.2011 13:38

Цитата:

Сообщение от Serg_pnz
Галерея

Почему нельзя показать галерею, не блокируя остальную страницу?

Цитата:

Сообщение от Serg_pnz
алерт

Почему нельзя показать сообщение, не блокируя остальную страницу?

Цитата:

Сообщение от Serg_pnz
опросник

Почему нельзя показать опросник, не блокируя остальную страницу?

Цитата:

Сообщение от Serg_pnz
регистрация

Почему нельзя показать форму регистрации, не блокируя остальную страницу?

Serg_pnz 25.09.2011 14:28

Если мне понадобитсмя сделать акцент - я буду блокировать страницу!
Ибо «бывает и не обойтись»

x-yuri 25.09.2011 19:54

Цитата:

Сообщение от melky
Так зачем каждый раз создавать новое модальное окно, прописывать ему стили и дочерние элементы плюс дополнительные атрибуты ?

если ты мерял производительность и она заметно отличается, это аргумент в поддержку твоего решения. Но при твоем подходе код может быть запутанным. А возможность изменения содержимого окна - это полезно, например, для всяких мастеров.

Цитата:

Сообщение от melky
Я попытался использовать MVC : ведь если окно всегда на странице, то его внешний вид может изменить верстальщик, сразу на странице, вместо того, чтобы лезть в код.

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

Цитата:

Сообщение от melky
нет. размеры оверлея определяются через css.

задаются через css? Не уверен, что это возможно.

Цитата:

Сообщение от Kolyaj
Почему нельзя показать галерею, не блокируя остальную страницу?

Yo dawg! I heard that you like modal windows, so we put some modal windows in your modal windows so you can facepalm while you facepalm. :) Но лучше не блокировать без необходимости, конечно.


Часовой пояс GMT +3, время: 16:12.