11.04.2015, 21:36
|
Интересующийся
|
|
Регистрация: 05.02.2015
Сообщений: 18
|
|
Самописное модальное окно
Добрый день, скажу сразу, я УЧЮСЬ!
Написал некую белеберду, для модальных окон, принцип работы как в ФансиБокс
Всё работает.
Очень прошу прокоментировать творение, посоветуйте как грамотнее написать.
Или всё таки моё творение безнадёжное, и лучше использовать ФансиБокс ?
Пример ссылки:
<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, 11.04.2015 в 21:53.
|
|
11.04.2015, 21:45
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
avantyrist,
сделали бы макет полностью запускаемым
|
|
11.04.2015, 21:49
|
Интересующийся
|
|
Регистрация: 05.02.2015
Сообщений: 18
|
|
Всмысле ? не понял Вас
|
|
11.04.2015, 21:58
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
модальное окно на 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>
Последний раз редактировалось рони, 29.10.2019 в 09:02.
|
|
11.04.2015, 22:04
|
Интересующийся
|
|
Регистрация: 05.02.2015
Сообщений: 18
|
|
JS нужен
Макет сделаю завтра
На КСС вы круто накидали !!!
|
|
11.04.2015, 22:12
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
avantyrist,
css это гугля - а live устарело и с id у вас перебор
|
|
11.04.2015, 22:15
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
|
|
11.04.2015, 22:25
|
Интересующийся
|
|
Регистрация: 05.02.2015
Сообщений: 18
|
|
пока юзаю Live, старая верси jQuery скрипты надо подогнать
Всмысле с ID перебор ?
Дело в том что в модальных окнах делаются разные манипуляции на Ajax.
Вот и приходится сначала записать Содержимое контейнера, потом удалить его, потом вставить содержимое как модальное окно - сделать в нём манипуляции Ajax, а при закрытии вернуть его на место , а модальное окно удалить
Или я не о том ?
Последний раз редактировалось avantyrist, 11.04.2015 в 22:30.
|
|
11.04.2015, 22:59
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от avantyrist
|
find("#"+link+"").
|
сколько раз в коде заведите переменную и красное лишнее
|
|
|
|