Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.11.2016, 13:39
Аспирант
Отправить личное сообщение для Ilya_Ru Посмотреть профиль Найти все сообщения от Ilya_Ru
 
Регистрация: 06.04.2015
Сообщений: 42

Центрирование всплывающего div по отношению к элементу
Добрый день. Есть вот такой код, вот такая задумка:
<html>
<head>
  <meta charset="UTF-8">
  <title></title>
[COLOR="DarkOrchid"]//Стили, относящиеся чисто к всплывающим окнам:[/COLOR]
      <style>
.open-popup {
	border-bottom: 2px dotted #0036fd;
	cursor: pointer;
	font-size: 18px;
position:relative;
margin:10px;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	-o-user-select: none;
	user-select: none;
}
.open-popup:hover {
	border-bottom: 2px dotted #00bfff;
	color: #fff;
}
.popup {
	background: #544f6b -5px -5px;
	border: 5px solid rgba(197, 192, 192, .7);
	border-radius: 10px;
	height: 500px;
	position: absolute;
	width: 90%;
	z-index: 999;
}
.popup-content {
    border-radius: 6px;
    line-height: 1.6;
    padding: 14px 18px 0 17px;
	color:#fff;
}
.popup-title {
	background: url(http://verstaka.net/examples/html-css/popups/popup-1/images/bg-popup-title.png) repeat-x;
	border-radius: 6px 6px 0 0;
	font-family: 'HelveticaNeue', sans-serif;
	font-size: 17px;
	height: 43px;
	line-height: 43px;
	text-align: center;
	padding: 0 0 0 16px;
	text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
	box-shadow: inset 0 1px 1px #e6edef;
	margin: 0;
		color: #000;
}
.popup-choice {
	margin: 34px 0 0;
	text-align: center;
}

.btn-close {
	background: url(http://verstaka.net/examples/html-css/popups/popup-1/images/btn-close.png) no-repeat;
	height: 17px;
	right: 15px;
	position: absolute;
	top: 13px;
	width: 16px;
}
.btn-close:hover {
	cursor: pointer;
}
.hide-layout {
	background: #000;
	bottom: 0;
	display: none;
	height: 100%;
	opacity: 0.5;
	position: fixed;
	top: 0;
	width: 100%;
	z-index: 998;
}
      </style>
</head>
[COLOR="DarkOrange"]//примерная верстка[/COLOR]
<body>
<div style="text-align:center; height:200px; background:red">тут ооочень много текста и всякого рода плюшек</div>
<div><p>Вкладка первая</p>
 <div style="text-align:center; height:200px;  background:blue">Тут находится большой текст, в нем есть ссылка на всплывающее окно. Вот эта ссылка: <a class="click" data-frameid="1" data-framesrc="http://javascript.ru"><span id="click-me1" class="open-popup">щелкнем сюда, откроется всплывающее окно.</span></a></div></div>

<div><p>Вкладка вторая</p>
<div style="text-align:center; height:200px;  background:yellow">Это совершенно другой блок, в котором находится совершенно другой текст и другая ссылка:  <a class="click" data-frameid="2" data-framesrc="http://nic.ru"><span id="click-me2" class="open-popup">какое-то другое всплывающее окно</span></a></div> 
</div>

<div><p>Вкладка третья</p>
<div style="text-align:center; height:200px;  background:#fff">Здесь будет тоже текст, но с использованием первой ссылки на всплывающее окно: <a class="click" data-frameid="1" data-framesrc="http://javascript.ru"><span id="click-me1" class="open-popup">щелкнем сюда, откроется всплывающее окно.</span></a></div>

<div style="text-align:center; height:200px;  background:green">А вот здесь будет написан заключительный текст со второй ссылкой на всплывающее окно: <a class="click" data-frameid="2" data-framesrc="http://nic.ru"><span id="click-me2" class="open-popup">какое-то другое всплывающее окно</span></a>
</div>
</div>
[COLOR="Red"]//как видите, так таковых общих родителей (кроме body) нет[/COLOR]

[COLOR="SeaGreen"]//нижние дивы относятся к всплывающим окнам, к их оформлению:[/COLOR]
<div style="display:none" id="popup1" class="popup">
			<h2 class="popup-title">Javascript.ru</h2>
			<div class="popup-content">
				  <div class="frameid-1"></div>
			</div>
			<div id="btn-close1" class="btn-close" title="Закрыть" unselectable="on"></div>
	</div>
	<div id="hide-layout1" class="hide-layout" unselectable="on"></div></div>
	
<div style="display:none" id="popup2" class="popup">
			<h2 class="popup-title">регистратор доменов</h2>
			<div class="popup-content">
				  <div class="frameid-2"></div>
			</div>
			<div id="btn-close2" class="btn-close" title="Закрыть" unselectable="on"></div>
	</div>
	<div id="hide-layout2" class="hide-layout"></div></div>


<script src="https://code.jquery.com/jquery-1.9.1.js"></script>

[COLOR="RoyalBlue"]//скрипт, отвечающий за всплывающие окна их позиционирование и загрузку iframe по щелчку[/COLOR]
<script>
$(document).ready(function(){
  $('.click').on('click', function(){
    var frameId = $(this).data('frameid'),
        frameSrc = $(this).data('framesrc');
  
  		$('#popup'+frameId).hide();
		$('#hide-layout'+frameId).css({opacity: .5});
		alignCenter($('#popup'+frameId));
				$(window).resize(function() {
			alignCenter($('#popup'+frameId));
		})
  
  			$('#hide-layout'+frameId).fadeIn(300);
			 $('#popup'+frameId).fadeIn(300);

			$('.btn-close, #hide-layout'+frameId).click(function() {
			$('#hide-layout'+frameId).fadeOut(300);
			$('#popup'+frameId).fadeOut(300);
		})
			
    if(!document.getElementById(frameId)){
      $('<iframe />', {
       id : frameId,
       src : frameSrc,
	  	   width:'100%',
	   height:'400px',
	   frameborder:'0',
    }).appendTo('.frameid-'+frameId);
   }
  });
});
				function alignCenter(elem) {		
				var scrollHeight = Math.max(
  document.body.scrollHeight, document.documentElement.scrollHeight,
  document.body.offsetHeight, document.documentElement.offsetHeight,
  document.body.clientHeight, document.documentElement.clientHeight
);				
			elem.css({
				left: ($(window).width() - elem.width()) / 2 + 'px',
	top: ((scrollHeight) - elem.height()) / 2 + 'px'
			})
		}
</script>
</body></html>

Как сделать так, чтобы нажали на ссылку, и окно всплыло в том же месте, где расположена ссылка перекрывая ее? Грубо говоря, чтобы ссылка была центром всплывающего окна. Нужно что-то с центрированием делать, но что? Помогите, пожалуйста

Последний раз редактировалось Ilya_Ru, 10.11.2016 в 00:47.
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2016, 15:24
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Ilya_Ru
чтобы ссылка была центром всплывающего окна
Как вариант, вычислять координаты той ссылки... Потом рассчитывать координаты твоего "всплывающего окна"...
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2016, 15:42
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Ilya_Ru,
Для определения координаты ссылки по вертикали используйте
getBoundingClientRect().top
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2016, 16:52
Аспирант
Отправить личное сообщение для Ilya_Ru Посмотреть профиль Найти все сообщения от Ilya_Ru
 
Регистрация: 06.04.2015
Сообщений: 42

А живой пример привести сможете?
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2016, 16:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Ilya_Ru
А живой пример привести сможете?
Ты даже тестовый пример нормальный не удосужился сделать... А хочешь увидеть какое-то "готовое" решение.
Смотри тут, может найдешь чего подходящее...
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2016, 17:05
Аспирант
Отправить личное сообщение для Ilya_Ru Посмотреть профиль Найти все сообщения от Ilya_Ru
 
Регистрация: 06.04.2015
Сообщений: 42

ksa,
Надо было всю страницу сайта представить? :-) Окай, я могу :-) Единственное, что я немного сглупил - так это представил полные css всплывающего окна. Можно было сократить...

Зато я куском верстки показал, в чем проблема, можно визуально все пощупать, да и показал то, что css всякие position тут неуместны :-)
Ответить с цитированием
  #7 (permalink)  
Старый 09.11.2016, 18:16
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<html>
<head>
  <meta charset="UTF-8">
  <title></title>
[COLOR="DarkOrchid"]//Стили, относящиеся чисто к всплывающим окнам:[/COLOR]
      <style>
.open-popup {
	border-bottom: 2px dotted #0036fd;
	cursor: pointer;
	font-size: 18px;
position:relative;
margin:10px;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	-o-user-select: none;
	user-select: none;
}
.open-popup:hover {
	border-bottom: 2px dotted #00bfff;
	color: #fff;
}
.popup {
	background: #544f6b -5px -5px;
	border: 5px solid rgba(197, 192, 192, .7);
	border-radius: 10px;
	height: 500px;
	position: absolute;
	width: 90%;
	z-index: 999;
}
.popup-content {
    border-radius: 6px;
    line-height: 1.6;
    padding: 14px 18px 0 17px;
	color:#fff;
}
.popup-title {
	background: url(http://verstaka.net/examples/html-css/popups/popup-1/images/bg-popup-title.png) repeat-x;
	border-radius: 6px 6px 0 0;
	font-family: 'HelveticaNeue', sans-serif;
	font-size: 17px;
	height: 43px;
	line-height: 43px;
	text-align: center;
	padding: 0 0 0 16px;
	text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
	box-shadow: inset 0 1px 1px #e6edef;
	margin: 0;
		color: #000;
}
.popup-choice {
	margin: 34px 0 0;
	text-align: center;
}

.btn-close {
	background: url(http://verstaka.net/examples/html-css/popups/popup-1/images/btn-close.png) no-repeat;
	height: 17px;
	right: 15px;
	position: absolute;
	top: 13px;
	width: 16px;
}
.btn-close:hover {
	cursor: pointer;
}
.hide-layout {
	background: #000;
	bottom: 0;
	display: none;
	height: 100%;
	opacity: 0.5;
	position: fixed;
	top: 0;
	width: 100%;
	z-index: 998;
}
      </style>
</head>
[COLOR="DarkOrange"]//примерная верстка[/COLOR]
<body>
<div style="text-align:center; height:200px; background:red">тут ооочень много текста и всякого рода плюшек</div>
<div><p>Вкладка первая</p>
 <div style="text-align:center; height:200px;  background:blue">Тут находится большой текст, в нем есть ссылка на всплывающее окно. Вот эта ссылка: <a class="click" data-frameid="1" data-framesrc="http://javascript.ru"><span id="click-me1" class="open-popup">щелкнем сюда, откроется всплывающее окно.</span></a></div></div>

<div><p>Вкладка вторая</p>
<div style="text-align:center; height:200px;  background:yellow">Это совершенно другой блок, в котором находится совершенно другой текст и другая ссылка:  <a class="click" data-frameid="2" data-framesrc="http://nic.ru"><span id="click-me2" class="open-popup">какое-то другое всплывающее окно</span></a></div> 
</div>

<div><p>Вкладка третья</p>
<div style="text-align:center; height:200px;  background:#fff">Здесь будет тоже текст, но с использованием первой ссылки на всплывающее окно: <a class="click" data-frameid="1" data-framesrc="http://javascript.ru"><span id="click-me1" class="open-popup">щелкнем сюда, откроется всплывающее окно.</span></a></div>

<div style="text-align:center; height:200px;  background:green">А вот здесь будет написан заключительный текст со второй ссылкой на всплывающее окно: <a class="click" data-frameid="2" data-framesrc="http://nic.ru"><span id="click-me2" class="open-popup">какое-то другое всплывающее окно</span></a>
</div>
</div>
[COLOR="Red"]//как видите, так таковых общих родителей (кроме body) нет[/COLOR]

[COLOR="SeaGreen"]//нижние дивы относятся к всплывающим окнам, к их оформлению:[/COLOR]
<div style="display:none" id="popup1" class="popup">
			<h2 class="popup-title">Javascript.ru</h2>
			<div class="popup-content">
				  <div class="frameid-1"></div>
			</div>
			<div id="btn-close1" class="btn-close" title="Закрыть" unselectable="on"></div>
	</div>
	<div id="hide-layout1" class="hide-layout" unselectable="on"></div></div>
	
<div style="display:none" id="popup2" class="popup">
			<h2 class="popup-title">регистратор доменов</h2>
			<div class="popup-content">
				  <div class="frameid-2"></div>
			</div>
			<div id="btn-close2" class="btn-close" title="Закрыть" unselectable="on"></div>
	</div>
	<div id="hide-layout2" class="hide-layout"></div></div>


<script src="https://code.jquery.com/jquery-1.9.1.js"></script>

[COLOR="RoyalBlue"]//скрипт, отвечающий за всплывающие окна их позиционирование и загрузку iframe по щелчку[/COLOR]
<script>
$(document).ready(function(){
  $('.click').on('click', function(){
    var frameId = $(this).data('frameid'),
        frameSrc = $(this).data('framesrc');
  
  		$('#popup'+frameId).hide();
		$('#hide-layout'+frameId).css({opacity: .5});
		alignCenter($('#popup'+frameId),this);
				$(window).resize(function() {
			alignCenter($('#popup'+frameId),this);
		})
  
  			$('#hide-layout'+frameId).fadeIn(300);
			 $('#popup'+frameId).fadeIn(300);

			$('.btn-close, #hide-layout'+frameId).click(function() {
			$('#hide-layout'+frameId).fadeOut(300);
			$('#popup'+frameId).fadeOut(300);
		})
			
    if(!document.getElementById(frameId)){
      $('<iframe />', {
       id : frameId,
       src : frameSrc,
	  	   width:'100%',
	   height:'400px',
	   frameborder:'0',
    }).appendTo('.frameid-'+frameId);
   }
  });
});
				function alignCenter(elem,center) {		
				var scrollTop = center.scrollTop,
                                      centerTop = $(center).offset().top;

			elem.css({
				left: ($(window).width() - elem.width()) / 2 + 'px',
	top: (centerTop - scrollTop - elem.height() / 2) + 'px'
			})
		}
</script>
</body></html>
Ответить с цитированием
  #8 (permalink)  
Старый 09.11.2016, 18:52
Аспирант
Отправить личное сообщение для Ilya_Ru Посмотреть профиль Найти все сообщения от Ilya_Ru
 
Регистрация: 06.04.2015
Сообщений: 42

Dilettante_Pro,
Отлииично :-) Спасибо!!! Все работает как и должно :-)
Ответить с цитированием
  #9 (permalink)  
Старый 10.11.2016, 08:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Ilya_Ru
Надо было всю страницу сайта представить?
Видно ты не понимаешь, что значит тестовый пример...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработчик событий для динамически добавленных элементов Tecvid Events/DOM/Window 28 25.06.2018 13:49
Показать div при наведении / jQuery updaite Элементы интерфейса 4 28.07.2014 03:45
обратиться к элементу внутри div nubas Элементы интерфейса 7 10.06.2014 02:47
Перемещение по странице к div элементу coolplayer Общие вопросы Javascript 3 26.07.2012 20:03
Как прокрутить переполненный div к внутреннему элементу? Serg_pnz jQuery 0 16.05.2011 17:52