Message Layer
구질구질한 코드 두개
절대위치 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"; }