網(LieHuo.Net)教程 HTML頁面彈出自定義對話框并跳轉頁面的兩種方法(使用JavaScript)
方法一 系統API法:
調用window.showModalDialog打開以自定義頁面為內容的對話框。根據其返回值,通過window.location.href跳轉指定頁面。window.showModalDialog的使用方法請參考http://msdn.microsoft.com/en-us/library/ms536759(VS.85).aspx
<!--需要彈出對話框的頁面-->
<script type="text/javascript">
function fnOpen()
{
var r = window.showModalDialog("http://dlg.aspx", "", "dialogWidth: 200px; dialogHeight: 200px; resizable: no; scroll: no;status: no;edge: sunken;unadorned: yes;");
switch(r)
{
case 1:
window.location.href="http://1.aspx"
break;
default:
break;
}
}
</script>
<!--img控件,點擊調用fnOpen-->
<div id="1" align="center" style="cursor:pointer">
<br><img src="1.png" alt="" style="width:123px;height:43px;" onclick="fnOpen()"/>
</div>
新建一個dlg.aspx,在里面隨意添加需要顯示的內容,在退出時賦以返回值。
<!--dlg.aspx添加返回值以及關閉對話框-->
<input name="Btn" type="button" value="1" styleonclick="window.returnValue=1;window.close();"></td>
優點:方便快速,比較簡單。
缺點:在非IE下運行可能會不正常。對話框的邊框去不掉。
拓展:還可以使用window.open,showmodelessDialog等方法,做法類似,效果各有不同。
方法二:遮罩法
通過遮罩,事先隱藏一個div,在需要的時候調出顯示既可。
<!--以下代碼從網上多處學習整合而成,由于來源不一,并經過自行修改,請原諒未作注明-->
<script type="text/javascript">
var docEle = function()
{
return document.getElementById(arguments[0]) || false;
}
function openNewDiv(_id)
{
var m = "mask";
if (docEle(_id)) document.body.removeChild(docEle(_id));
if (docEle(m)) document.body.removeChild(docEle(m));
//mask遮罩層
var newMask = document.createElement("div");
newMask.id = m;
newMask.style.position = "absolute";
newMask.style.zIndex = "1";
_scrollWidth = Math.max(document.body.scrollWidth,document.documentElement.scrollWidth);
_scrollHeight = Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);
newMask.style.width = _scrollWidth + "px";
newMask.style.height = _scrollHeight + "px";
newMask.style.top = "0px";
newMask.style.left = "0px";
newMask.style.background = "#33393C";
newMask.style.filter = "alpha(opacity=40)";
newMask.style.opacity = "0.40";
document.body.appendChild(newMask);
//新彈出層
var newDiv = document.createElement("div");
newDiv.id = _id;
newDiv.style.position = "absolute";
newDiv.style.zIndex = "9999";
newDivWidth = 250;
newDivHeight = 200;
newDiv.style.width = newDivWidth + "px";
newDiv.style.height = newDivHeight + "px";
newDiv.style.top = (document.body.scrollTop + document.body.clientHeight/2 - newDivHeight/2) + "px";
newDiv.style.left = (document.body.scrollLeft + document.body.clientWidth/2 - newDivWidth/2) + "px";
newDiv.style.background = "#EFEFEF";
newDiv.style.border = "1px solid #860001";
newDiv.style.padding = "5px";
newDiv.innerHTML = document.getElementById("HideDlg").innerHTML;
newDiv.innerHTML+= " "
document.body.appendChild(newDiv);
//彈出層滾動居中
function newDivCenter()
{
newDiv.style.top = (document.body.scrollTop + document.body.clientHeight/2 - newDivHeight/2) + "px";
newDiv.style.left = (document.body.scrollLeft + document.body.clientWidth/2 - newDivWidth/2) + "px";
}
if(document.all)
{
window.attachEvent("onscroll",newDivCenter);
}
else
{
window.addEventListener('scroll',newDivCenter,false);
}
//關閉新圖層和mask遮罩層
var newA = document.createElement("a");
newA.href = "#";
newA.innerHTML = "Cancel";
newA.onclick = function()
{
if(document.all)
{
window.detachEvent("onscroll",newDivCenter);
}
else
{
window.removeEventListener('scroll',newDivCenter,false);
}
document.body.removeChild(docEle(_id));
document.body.removeChild(docEle(m));
return false;
}
newDiv.appendChild(newA);
}
function closeDiv()
{
if(document.all)
{
window.detachEvent("onscroll",newDivCenter);
}
else
{
window.removeEventListener('scroll',newDivCenter,false);
}
document.body.removeChild(docEle(_id));
document.body.removeChild(docEle(m));
return false;
}
</script>
<!--img控件,點擊觸發-->
<div id="1" align="center" style="cursor:pointer">
<br>
<img src="1.png" alt="" style="width:123px;height:43px;" onclick="openNewDiv('newDiv');return false;"/>
</div>
<!--隱藏的div,隨意修改-->
<div id="HideDlg" style="display:none;">
<input name="Btn" type="button" value="1" onclick="window.location.href='http://www.vxbq.cn/'
</div>
優點:顯示效果好,無邊框,彈出后始終保持在屏幕中部,主頁面變灰。
缺點:代碼復雜。
注意:如果是在motherpage中添加,觸發控件如果為<input img>的時候,可能會觸發頁面自刷屏導致頁面跳轉被自己覆蓋。
下一篇 分析新手站長所面臨的幾個誤區