ejacky 发表于 2013-2-7 17:32:55

fixPosition固定div位置(跨浏览器浮动定位)

代码(看着可能比较多,大部分是在处理兼容ie6):
/*    *author:sohighthesky    *From:http://www.uedsky.com/    *Date:2009-11-1    */    /*    *target 要固定的元素对象,也可以是元素的id    *pos:object/string 指定固定到的位置,类型为object时,使用json方式如{right:200,bottom:50} ,为string时可选参数如下:    *cc,正中间,lc左边,rc 右边    *lt左上角,ct 上边,rt右上角    *lb 左下角,cb 底部,rb 右下角    */   var fixPosition=function(target,pos) {      this.target= this.g(target);      this.pos=pos;      this.init();//};    fixPosition.prototype={      isScroll:navigator.userAgent.indexOf("MSIE 6")!=-1 ||(window.ActiveXObject && document.compatMode!="CSS1Compat"),      ae:function(e,call) {          if(window.addEventListener)            window.addEventListener(e,call,false);          else            window.attachEvent("on"+e,call);      },      g:function(id) {          return typeof(id)=="string"?document.getElementById(id):id;      },      setPos:function() {//设置位置          var de;          if(document.compatMode=="CSS1Compat")de=document.documentElement;          else de=document.body;                  if(typeof(this.pos)=="string") {//            if(!this.isScroll){                  switch(this.pos.charAt(0)) {                      case "l":                        this.target.style.left="0px";                        break;                      case "r":                        this.target.style.right="0px";                        break;                      default:                        this.target.style.left=(de.clientWidth-this.target.clientWidth)/2 +"px";                           break;                  }                  switch(this.pos.charAt(1)) {                      case "t":                        this.target.style.top="0px";                        break;                      case "b":                        this.target.style.bottom="0px";                        break;                      default:                        this.target.style.top=(de.clientHeight-this.target.clientHeight)/2 +"px";                           break;                  }            }else {                  switch(this.pos.charAt(0)) {                      case "l":                        this.target.style.left=de.scrollLeft+"px";                        break;                      case "r":                        this.target.style.left=de.scrollLeft+de.clientWidth-this.target.clientWidth +"px";                        break;                      default:                        this.target.style.left=de.scrollLeft+((de.clientWidth-this.target.clientWidth)/2)+"px";                        break;                  }                  switch(this.pos.charAt(1)) {                      case "t":                        this.target.style.top=de.scrollTop+"px";                        break;                      case "b":                        this.target.style.top=de.scrollTop+de.clientHeight-this.target.clientHeight+"px";                        break;                      default:                        this.target.style.top=de.scrollTop+((de.clientHeight-this.target.clientHeight)/2)+"px";                        break;                  }            }          } else {            if(!this.isScroll) {                  for(var p in this.pos)                      this.target.style=this.pos+"px";            } else {                  for(var p in this.pos) {                      switch(p.toLowerCase()) {                        case "left":                              this.target.style.left=de.scrollLeft+this.pos+"px";                              break;                        case "right":                              this.target.style.left=de.scrollLeft+de.clientWidth-this.target.clientWidth-this.pos+"px";                              break;                        case "top":                              this.target.style.top=de.scrollTop+this.pos+ "px";                              break;                        case "bottom":                              this.target.style.top=de.scrollTop+de.clientHeight-this.target.clientHeight-this.pos+"px";                              break;                      }                  }            }          }      },      init:function() {          if(!this.pos)            throw Error("Invalid arguments .");          if(!this.isScroll)            this.target.style.position="fixed";          else            this.target.style.position="absolute";          var timer,o=this;          this.ae("resize",function() {//支持fixed的浏览器窗体大小改变时也重置位置,防止中间无法居中            clearTimeout(timer);            timer=setTimeout(function() {                  o.setPos();            },30);          });          if(this.isScroll) {//滚动            this.ae("scroll",function() {                                  clearTimeout(timer);                  timer=setTimeout(function() {                      o.setPos();                  },30);            });          }          this.setPos();      }}/**强烈建议您的页面加上w3c的dtd*/
示例代码:
<!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>    <title>固定元素位置</title>    <style type="text/css">      body,th,td    {font-size:10pt;font-family:Tahoma,Arial,'\5b8b\4f53','\5FAE\8F6F\96C5\9ED1';}      a{color:#3366CC; text-decoration:none;}    #div1 div {width:300px;height:140px;border:solid 1px #0066CC;text-align:center;vertical-align:middle;line-height:1.8;    }    </style></head><body><div id="div1" style="height:2000px;width:2000px"><div pos="cc">author:<a href="http://hi.csdn.net/sohighthesky">sohighthesky</a><br/>Date:2009-11-1</div><div pos="lt">左上角</div><div pos="ct">上边</div><div pos="rt">右上角</div><div pos="lc">左边</div><div pos="rc">右边</div><div pos="lb">左下角</div><div pos="cb">下边</div><div pos="rb">右下角</div><div>自定义位置1:{left:60,top:160}</div><div>自定义位置2:{right:200,bottom:50}</div></div></body><script type="text/javascript" src="fixPosition.js"></script><script type="text/javascript">var divs=document.getElementById("div1").getElementsByTagName("div");var length=divs.length;for(var i=0;i<length-2;i++) {var cur=divs;new fixPosition(cur,cur.getAttribute("pos"));}new fixPosition(divs,{left:60,top:160});new fixPosition(divs,{right:200,bottom:50});</script></html>



via sohighthesky
页: [1]
查看完整版本: fixPosition固定div位置(跨浏览器浮动定位)