Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.04.2015, 21:36
Интересующийся
Отправить личное сообщение для avantyrist Посмотреть профиль Найти все сообщения от avantyrist
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2015, 21:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

avantyrist,
сделали бы макет полностью запускаемым
Ответить с цитированием
  #3 (permalink)  
Старый 11.04.2015, 21:49
Интересующийся
Отправить личное сообщение для avantyrist Посмотреть профиль Найти все сообщения от avantyrist
 
Регистрация: 05.02.2015
Сообщений: 18

Всмысле ? не понял Вас
Ответить с цитированием
  #4 (permalink)  
Старый 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.
Ответить с цитированием
  #5 (permalink)  
Старый 11.04.2015, 22:04
Интересующийся
Отправить личное сообщение для avantyrist Посмотреть профиль Найти все сообщения от avantyrist
 
Регистрация: 05.02.2015
Сообщений: 18

JS нужен
Макет сделаю завтра
На КСС вы круто накидали !!!
Ответить с цитированием
  #6 (permalink)  
Старый 11.04.2015, 22:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

avantyrist,
css это гугля - а live устарело и с id у вас перебор
Ответить с цитированием
  #7 (permalink)  
Старый 11.04.2015, 22:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

avantyrist,
http://tympanus.net/Development/ModalWindowEffects/
Ответить с цитированием
  #8 (permalink)  
Старый 11.04.2015, 22:25
Интересующийся
Отправить личное сообщение для avantyrist Посмотреть профиль Найти все сообщения от avantyrist
 
Регистрация: 05.02.2015
Сообщений: 18

пока юзаю Live, старая верси jQuery скрипты надо подогнать
Всмысле с ID перебор ?
Дело в том что в модальных окнах делаются разные манипуляции на Ajax.
Вот и приходится сначала записать Содержимое контейнера, потом удалить его, потом вставить содержимое как модальное окно - сделать в нём манипуляции Ajax, а при закрытии вернуть его на место , а модальное окно удалить

Или я не о том ?

Последний раз редактировалось avantyrist, 11.04.2015 в 22:30.
Ответить с цитированием
  #9 (permalink)  
Старый 11.04.2015, 22:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от avantyrist
find("#"+link+"").
сколько раз в коде заведите переменную и красное лишнее
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
модальное окно да/нет как confirm vladislav.blinov Javascript под браузер 7 04.03.2014 10:02
Bootstrap модальное окно igor.3dviz Общие вопросы Javascript 1 09.02.2014 13:27
модальное окно div'ом codingfighter Общие вопросы Javascript 28 03.09.2013 15:07
Как передать переменную в модальное окно sinsir jQuery 24 20.06.2013 16:59
Посоветуйте как сделать модальное окно battrack jQuery 3 12.07.2012 15:42