<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>景變暗的div可拖動提示視窗</title> <script language="javascript"> function alertWin(title, msg, w, h){ var titleheight = "22px"; // 提示視窗標題高度 var bordercolor = "#666699"; // 提示視窗的邊框顏色 var titlecolor = "#FFFFFF"; // 提示視窗的標題顏色 var titlebgcolor = "#666699"; // 提示視窗的標題背景色 var bgcolor = "#FFFFFF"; // 提示內容的背景色 var iWidth = document.documentElement.clientWidth; var iHeight = document.documentElement.clientHeight; var bgObj = document.createElement("div"); bgObj.style.cssText = "position:absolute;left:0px;top:0px;width:"+iWidth+"px;height:"+Math.max(document.body.clientHeight, iHeight)+"px;filter:Alpha(Opacity=30);opacity:0.3;background-color:#000000;z-index:101;"; document.body.appendChild(bgObj); var msgObj=document.createElement("div"); msgObj.style.cssText = "position:absolute;font:11px '宋體';top:"+(iHeight-h)/2+"px;left:"+(iWidth-w)/2+"px;width:"+w+"px;height:"+h+"px;text-align:center;border:1px solid "+bordercolor+";background-color:"+bgcolor+";padding:1px;line-height:22px;z-index:102;"; document.body.appendChild(msgObj); var table = document.createElement("table"); msgObj.appendChild(table); table.style.cssText = "margin:0px;border:0px;padding:0px;"; table.cellSpacing = 0; var tr = table.insertRow(-1); var titleBar = tr.insertCell(-1); titleBar.style.cssText = "width:100%;height:"+titleheight+"px;text-align:left;padding:3px;margin:0px;font:bold 13px '宋體';color:"+titlecolor+";border:1px solid " + bordercolor + ";cursor:move;background-color:" + titlebgcolor; titleBar.style.paddingLeft = "10px"; titleBar.innerHTML = title; var moveX = 0; var moveY = 0; var moveTop = 0; var moveLeft = 0; var moveable = false; var docMouseMoveEvent = document.onmousemove; var docMouseUpEvent = document.onmouseup; titleBar.onmousedown = function() { var evt = getEvent(); moveable = true; moveX = evt.clientX; moveY = evt.clientY; moveTop = parseInt(msgObj.style.top); moveLeft = parseInt(msgObj.style.left); document.onmousemove = function() { if (moveable) { var evt = getEvent(); var x = moveLeft + evt.clientX - moveX; var y = moveTop + evt.clientY - moveY; if ( x > 0 &&( x + w < iWidth) && y > 0 && (y + h < iHeight) ) { msgObj.style.left = x + "px"; msgObj.style.top = y + "px"; } } }; document.onmouseup = function () { if (moveable) { document.onmousemove = docMouseMoveEvent; document.onmouseup = docMouseUpEvent; moveable = false; moveX = 0; moveY = 0; moveTop = 0; moveLeft = 0; } }; } var closeBtn = tr.insertCell(-1); closeBtn.style.cssText = "cursor:pointer; padding:2px;background-color:" + titlebgcolor; closeBtn.innerHTML = "<span +titlecolor+";'>×</span>"; closeBtn.onclick = function(){ document.body.removeChild(bgObj); document.body.removeChild(msgObj); } var msgBox = table.insertRow(-1).insertCell(-1); msgBox.style.cssText = "font:10pt '宋體';"; msgBox.colSpan = 2; msgBox.innerHTML = msg; // 獲得事件Event對象,用於相容IE和FireFox function getEvent() { return window.event || arguments.callee.caller.arguments[0]; } } </script> </head> <body> <input type="button" value="點這裡" onclick="alertWin('標題','這裡是內容',300,200);" /> </body> </html>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
IE7.0、Firefox2.0、Opera9.0測試通過
歡迎大家指教批評
前段時間一直在研究Js,網上有很多關於相容瀏覽器方面的文章,給大家找了幾個:
http://blog.csdn.net/zqian1987/archive/2008/03/02/2140055.aspx
http://www.cnblogs.com/jacklong/archive/2008/01/10/1033954.html
下面寫寫我這段時間的一些心得,主要介紹相容IE和FireFox方面,Opera9.0前的版本好像N多東西不支援,暫時不介紹,Opera9.0以後的版本在Javascript解釋方面和FireFox比較接近。
我介紹的都是一些細節方面的東西,側重於寫一些不常見的情況,想到新的我會持續補充:
1、建立一個Element,通用的寫法為createElement("div")
IE中也可以這樣寫createElement("<div style='color:#FFFFFF'>"),但Firefox不認
2、IE中的width、height與Firefox中概念不同,IE中width=FireFox中的width+2*borderWidth+2*Padding
參見:http://help.powereasy.net/Template/WEB/1557.html
3、動態添加css代碼
cssStr = "p { color:#FF0000;} a { font-size:9pt;}";
var style = win.document.createStyleSheet();
style.cssText = cssStr;FireFox:複製內容到剪貼簿代碼:
cssStr = "p { color:#FF0000;} a { font-size:9pt;}";
var style = win.document.createElement("style");
style.type = "text/css";
style.innerHTML = cssStr;
win.document.getElementsByTagName("HEAD").item(0).appendChild(style); 4、table在後面添加加行或列,通用寫法insertRow(-1),insertCell(-1)
IE中insertRow(),insertCell()這樣寫也可以,Firefox不認
5、警告對話方塊alert(),IE中書寫時無參數則預設參數為空白字串,Firefox中則必須輸入參數,傳空參數則要寫成alert("");
6、給element.style.width賦值必須寫成24px,唯寫數字24的話,FireFox會不認,IE裡都可以
7、在使用Element,並給其綁定了onclick、onmouseover、onmousedown、onmouseout等事件
element.onclick = function() { alert("hello kitty"); };
時,需注意
將此元素添加到上階項目上時要用appendChild,不可以在上級中使用innerHTML操作,這樣會使事件無效