S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
前几天在网上找了许多资料,看了不少兄弟的源码,一直找不到合适的,要不就是拖动有问题,要不就是不兼容Firefox,所以自已写了一个,下面是代码:
<!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>无标题文档</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 style='font-size:15pt; color:"+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>

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

做浏览器兼容的工作真是一件相当痛苦的事,期待遵守标准的IE8尽快发布
出下面写写我这段时间的一些心得,主要介绍兼容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代码
   IE:
复制内容到剪贴板
代码:
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操作,这样会使事件无效
8、获得事件和事件源
   IE:事件:window.event
      事件源:window.event.srcElement
   FireFox:事件:arguments.callee.caller.arguments[0]
              事件源:arguments.callee.caller.arguments[0].target
9、在选中区域粘贴HTML
   IE:
复制内容到剪贴板
代码:
var r = window.document.selection.createRange();
range.pasteHTML("HTML代码");
FireFox:
复制内容到剪贴板
代码:
var r = window.getSelection().getRangeAt(0);
var oFragment = r.createContextualFragment(“HTML代码”);
r.deleteContents();
r.insertNode(oFragment);
[ 本帖最后由 linshushi 于 2008-4-10 14:36 编辑 ]

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理