Archive / Javascript / MessageLayer

구질구질한 코드 두개

절대위치 DIV를 화면 중앙에 표현

IE의 <select> 버그를 없애기 위해 아이프레임(iframe)을 이용

function openMessageWindow(elId) {
	var windowEl = document.getElementById(elId.split("#")[1]);
	if (!windowEl)
		return true;

	windowEl.style.display = '';
	windowEl.style.zIndex = 2;
	windowEl.style.position = 'absolute';
	windowEl.style.top = document.documentElement.scrollTop + (document.documentElement.clientHeight - windowEl.offsetHeight) / 2 + "px";
	windowEl.style.left = (document.documentElement.clientWidth - windowEl.offsetWidth) / 2 + "px";

	if (windowEl.mask)
		return true;

	var mask = document.createElement("iframe");
	mask.frameBorder = 0;
	mask.style.width = windowEl.offsetWidth + "px";
	mask.style.height = windowEl.offsetHeight + "px";
	mask.style.position = 'absolute';
	mask.style.top = windowEl.style.top;
	mask.style.left = windowEl.style.left;
	mask.style.zIndex = 1;
	document.getElementById("body").appendChild(mask);
	windowEl.mask = mask;
}
function closeMessageWindow(elId) {
	var windowEl = document.getElementById(elId.split("#")[1]);
	if (!windowEl)
		return true;

	windowEl.style.display = "none";
	windowEl.mask.parentNode.removeChild(windowEl.mask);
	windowEl.mask = null;
}

라이트 박스(light box) 효과

아이프레임을 생성하여 링크의 페이지를 화면 중앙에 표현

function openMessageWindow(href) {
	var windowEl = document.createElement("iframe");
	windowEl.src = href;
	windowEl.frameBorder = 0;
	windowEl.scrolling = "no";
	windowEl.allowTransparency = "true";
	windowEl.style.zIndex = 1001;
	windowEl.style.position = 'absolute';
	document.getElementById("body").appendChild(windowEl);
	document.getElementById("body").popup = windowEl;

	var selects = document.getElementsByTagName("select");
	for (i = 0; i < selects.length; i++) {
		selects.item(i).hided = true;
		selects.item(i).style.visibility = "hidden";
	}

	var mask = document.createElement("div");
	mask.onclick = closeMessageWindow;
	mask.style.width = document.documentElement.clientWidth + "px";
	mask.style.height = document.documentElement.scrollHeight + "px";
	mask.style.position = 'absolute';
	mask.style.top = "0";
	mask.style.left = "0";
	mask.style.zIndex = 1000;
	mask.style.backgroundColor = "#000";
	mask.style.opacity = "0.2";
	mask.style.filter = "alpha(opacity = 20)";
	document.getElementById("body").appendChild(mask);
	windowEl.mask = mask;
}
function closeMessageWindow() {
	var windowEl = parent.document.getElementById("body").popup;
	if (!windowEl)
		return true;

	var selects = parent.document.getElementsByTagName("select");
	for (i = 0; i < selects.length; i++) {
		if (selects.item(i).hided == true) {
			selects.item(i).style.visibility = "visible";
		}
	}

	windowEl.style.display = "none";
	windowEl.mask.parentNode.removeChild(windowEl.mask);
	windowEl.mask = null;
}
function positionMessageWindow() {
	if (!parent.document.getElementById("body").popup)
		return;

	var windowEl = parent.document.getElementById("body").popup;
	windowEl.style.height = "auto";
	windowEl.style.width = "auto";
	var windowElHeight = document.documentElement.scrollHeight;
	var windowElWidth = document.documentElement.scrollWidth;
	windowEl.style.height = windowElHeight + "px";
	windowEl.style.width = windowElWidth + "px";
	windowEl.style.top = parent.document.documentElement.scrollTop + (parent.document.documentElement.clientHeight - windowElHeight) / 2 + "px";
	windowEl.style.left = (parent.document.documentElement.clientWidth - windowElWidth) / 2 + "px";
}
Page last modified on May 27, 2009, at 09:00 AM

Powered by PmWiki