Самописное модальное окно
Добрый день, скажу сразу, я УЧЮСЬ! :)
Написал некую белеберду, для модальных окон, принцип работы как в ФансиБокс Всё работает. Очень прошу прокоментировать творение, посоветуйте как грамотнее написать. Или всё таки моё творение безнадёжное, и лучше использовать ФансиБокс ? Пример ссылки: <a class="modal_link" rel="nofollow" href="#compare_content">Подробнее...</a> в Ссылке указывается ключевой класс "modal_link" и href="#АйдишкаКонтейнера который должен стать модалкой" Пример контейнера: <div id="compare_content" class="dnone"> Тут содержимое,которое должно стать модальным окном, изначально скрытое ДисплейНоне </div> // <!--- Модальные ОКНА ЧЕРЕЗ ССЫЛКИ ---> function initModalLink(){ var ajax_conteiner=jQuery('#ajax_conteiner'), // определил главный контейнер куда помещается содержимое modal_link=jQuery('a.modal_link'); // определил клас ссылок которые работают как МодальноеОкно modal_link.live('click',function(){ event.preventDefault(); var link=jQuery(this).attr('href').split('#')[1], // Определяю ссылку, для того чтобы знать к какому Контейнеру обращался скрипт modal_title=jQuery(this).attr('title'), container=jQuery("#"+link+"").html(), // Получаю содержимое контейнера close='<div class="close_modal"></div>', // Кнопка закрытия МодалОкна overlay_b='<div id="overlay_black"></div>', //Оверлей modal_box="<div id="+link+" class='modal'>"+container+"</div>", //Создаю контейнер с КСС стилистикой модалки и помещаю в него содержимое scrol = jQuery(document).scrollTop(), wind_hm = jQuery(window).height() ; jQuery("#"+link+"").attr("id","modal_placeholder").html(''); // содержимое старого контейнера удаляю, и меняю его айдишник ajax_conteiner.append(modal_box,overlay_b).find("#"+link+"").append(close); //Вставляю содержимое Модалки в главный контейнер var box_hm=ajax_conteiner.find("#"+link+"").height(), //Расчёты КСС box_wm=ajax_conteiner.find("#"+link+"").width()/2, css_top=(wind_hm - box_hm)/2+scrol; if(css_top < "0"){var css_top =scrol+50;} ajax_conteiner.find("#"+link+"").css({"top":css_top, "margin-left":-box_wm}).addClass('show'); // Добавление КСС стилистики jQuery(".close_modal, #overlay_black").click(function(){ //Закрытие Модального Окна var box_ajax_conteiner=ajax_conteiner.find("#"+link+"").html(); //Получаю содержимое Модального Окна jQuery('#modal_placeholder').html(box_ajax_conteiner).attr("id",""+link+"").find('.close_modal').remove(); //Вставляю содержимое на старое место и возвращаю старый айдишник и удаляю кнопку "Закрыть" jQuery("#overlay_black, #ajax_conteiner .modal").fadeOut(200, function(){ jQuery(this).remove();}) // Плавно удаляю Оверлей и модалку }); }); } |
avantyrist,
сделали бы макет полностью запускаемым |
Всмысле ? не понял Вас :(
|
модальное окно на css
avantyrist,
может ну его js, даёшь css! макет это то что ниже. <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> /* Контейнер */ .modal { /* Слой перекрытия */ position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); z-index: 10000; /* Трансформации прозрачности при открытии */ -webkit-transition: opacity 500ms ease-in; -moz-transition: opacity 500ms ease-in; transition: opacity 500ms ease-in; /* Скрываем изначально */ opacity: 0; pointer-events: none; } /* Показываем модальное окно */ .modal:target { opacity: 1; pointer-events: auto; } /* Содержание */ .modal > div { width: 300px; background: #ffffff; position: relative; margin: 10% auto; /* По умолчанию минимизируем анимацию */ -webkit-animation: minimise 500ms linear; /* Придаем хороший вид */ padding: 30px; -moz-border-radius: 7px; border-radius: 7px; -webkit-box-shadow: 0 3px 20px rgba(0,0,0,0.9); -moz-box-shadow: 0 3px 20px rgba(0,0,0,0.9); box-shadow: 0 3px 20px rgba(0,0,0,0.9); text-shadow: 0 1px 0 #fff; } /* Изменяем анимацию при открытии модального окна*/ .modal:target > div { -webkit-animation-name: bounce; } .modal h2 { font-size: 36px; padding: 0 0 20px; } @-webkit-keyframes bounce { 0% { -webkit-transform: scale3d(0.1,0.1,1); -webkit-box-shadow: 0 3px 20px rgba(0,0,0,0.9); } 55% { -webkit-transform: scale3d(1.08,1.08,1); -webkit-box-shadow: 0 10px 20px rgba(0,0,0,0); } 75% { -webkit-transform: scale3d(0.95,0.95,1); -webkit-box-shadow: 0 0 20px rgba(0,0,0,0.9); } 100% { -webkit-transform: scale3d(1,1,1); -webkit-box-shadow: 0 3px 20px rgba(0,0,0,0.9); } } @-webkit-keyframes minimise { 0% { -webkit-transform: scale3d(1,1,1); } 100% { -webkit-transform: scale3d(0.1,0.1,1); } } /* Ссылка на кнопку Закрыть */ .modal a[href="#close"] { position: absolute; right: 0; top: 0; color: transparent; } /* Сбрасываем изменения */ .modal a[href="#close"]:focus { outline: none; } /* Создаем кнопку Закрыть */ .modal a[href="#close"]:after { content: 'X'; display: block; /* Позиционируем */ position: absolute; right: -10px; top: -10px; width: 20px; padding: 1px 1px 1px 2px; /* Стили */ text-decoration: none; text-shadow: none; text-align: center; font-weight: bold; background: #000; color: #ffffff; border: 3px solid #ffffff; -moz-border-radius: 20px; border-radius: 20px; -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5); box-shadow: 0 1px 3px rgba(0,0,0,0.5); } .modal a[href="#close"]:focus:after, .modal a[href="#close"]:hover:after { -webkit-transform: scale(1.1,1.1); -moz-transform: scale(1.1,1.1); } .modal a[href="#close"]:focus:after { outline: 0px solid #000; } /* Открываем модальное окно */ a.openModal { } a.openModal:hover, a.openModal:focus { } .modal .modal_title { display: block; text-align: center; font-size: 22pt; } body{ height: 1500px; } .button.openModal.up{ display: block; margin-top: 400px; } </style> </head> <body> <a href="#modal" class="button openModal">Открыть модальное окно</a> <a href="#modal2" class="button openModal up">Открыть модальное окно2</a> <div id="modal" class="modal"> <div> <div class="text">Любое содержимое модального окна</div> <a href="#close" title="Закрыть">Закрыть</a> </div> </div> <div id="modal2" class="modal"> <div> <div class="text">Любое содержимое модального окна 2</div> <a href="#close" title="Закрыть">Закрыть</a> </div> </div> </body> </html> |
JS нужен :)
Макет сделаю завтра :) На КСС вы круто накидали !!! :) |
avantyrist,
css это гугля - а live устарело и с id у вас перебор |
|
пока юзаю Live, старая верси jQuery скрипты надо подогнать
Всмысле с ID перебор ? Дело в том что в модальных окнах делаются разные манипуляции на Ajax. Вот и приходится сначала записать Содержимое контейнера, потом удалить его, потом вставить содержимое как модальное окно - сделать в нём манипуляции Ajax, а при закрытии вернуть его на место , а модальное окно удалить Или я не о том ? :( |
Цитата:
|
Часовой пояс GMT +3, время: 07:08. |