Показываем блок по центру страницы
При создании web-страниц с завидной регулярностью возникает необходимость динамически позиционировать блоки. Для этого бывает нужно узнать ширину и высоту видимой части страницы и уточнить, насколько страница прокручена вниз и вбок. Причем делать это надо так, чтобы работало везде. Приведенный ниже код располагает блок по центру страницы. Таким образом, совершается максимум действий. Так что код этот можно с успехом использовать как целиком, так и по частям.
Блок у нас будет примерно такой:
-
<div id="some_center_block"></div>
Для него делаем небольшой CSS:
-
#some_center_block {
-
border: 1px solid #555555;
-
padding: 3px;
-
z-index: 1000;
-
position: absolute;
-
display: none;
-
background-color: #ffffff;
-
cursor: pointer;
-
}
И теперь немного JavaScript'а:
-
function toggle_center_block(block_id, w, h) {
-
f = document.getElementById(block_id);
-
-
if (f.style.display == "block") {
-
f.style.display = "none";
-
} // прячем блок
-
else {
-
// Для начала узнаем размеры видимой области страницы
-
var myWidth = 0, myHeight = 0;
-
if (typeof(window.innerWidth) == 'number') {
-
// для всего кроме MSIE
-
myWidth = window.innerWidth;
-
myHeight = window.innerHeight;
-
} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
-
// IE6+
-
myWidth = document.documentElement.clientWidth;
-
myHeight = document.documentElement.clientHeight;
-
} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
-
// IE4
-
myWidth = document.body.clientWidth;
-
myHeight = document.body.clientHeight;
-
}
-
-
// Теперь уточняем, насколько страница прокручена вниз и вбок
-
var scrOfX = 0, scrOfY = 0;
-
if(typeof(window.pageYOffset) == 'number') {
-
// Netscape и его родственники
-
scrOfY = window.pageYOffset;
-
scrOfX = window.pageXOffset;
-
} else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
-
// DOM
-
scrOfY = document.body.scrollTop;
-
scrOfX = document.body.scrollLeft;
-
} else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
-
// IE6
-
scrOfY = document.documentElement.scrollTop;
-
scrOfX = document.documentElement.scrollLeft;
-
}
-
-
// А теперь позиционируем наш блок
-
f.style.top = String(Math.round((myHeight - h) / 2) + scrOfY) + 'px';
-
f.style.left = String(Math.round((myWidth - w) / 2) + scrOfX) + 'px';
-
f.style.width = w + ((3 + 1) * 2);
-
f.style.height = h + ((3 + 1) * 2);
-
f.style.display = "block";
-
} // показываем блок
-
} // toggle_center_block
Вызывать это дело мы будет при каком-либо событии как-то так:
-
toggle_center_block("some_center_block", 200, 100);


October 9th, 2007 at 13:44 Quote
Можно проще сделать при помощи CSS-а :)
добавить к имеющемуся CSS-у:
top: 50%;left: 50%;
А блок вставлять следующим образом:
<div id="some_center_block" style="width: 200px; height: 50px; margin: -25px 0 0 -100px;">bla bla bla</div>В margin минус половина высоты и ширины блока соответственно ;)
October 28th, 2007 at 20:15 Quote
Hairgel_Addict - rulez!
А то у Философа реально большой код.
October 29th, 2007 at 07:11 Quote
d4n @ 28.10.2007, 20:15 #
так это для разных случаев :)
October 29th, 2007 at 12:51 Quote
Filosoff @ 29.10.2007, 07:11 #
для каких таких "разных"? о_О
October 29th, 2007 at 12:59 Quote
Hairgel_Addict @ 29.10.2007, 12:51 #
мой код используется для показа во свплывающих div'ах картинок в галерее. размеры картинок могут быть разные.
October 29th, 2007 at 13:20 Quote
ну дык ты ж при вызове функции все равно указываешь размеры. что мешает указывать и половинные значиния для минусовых margin-ов? они ж в style="" прописаны, как размеры блока, так и margin.. можно даже для "красоты" кода функцию использовать для вычесления половин размеров :)