`
ejacky
  • 浏览: 31996 次
  • 性别: Icon_minigender_1
  • 来自: 抚顺
社区版块
存档分类
最新评论

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[p]=this.pos[p]+"px";  
            } else {  
                for(var p in this.pos) {  
                    switch(p.toLowerCase()) {  
                        case "left":  
                            this.target.style.left=de.scrollLeft+this.pos[p]+"px";  
                            break;  
                        case "right":  
                            this.target.style.left=de.scrollLeft+de.clientWidth-this.target.clientWidth-this.pos[p]+"px";  
                            break;  
                        case "top":  
                            this.target.style.top=de.scrollTop+this.pos[p]+ "px";  
                            break;  
                        case "bottom":  
                            this.target.style.top=de.scrollTop+de.clientHeight-this.target.clientHeight-this.pos[p]+"px";  
                            break;  
                    }  
                }  
            }  
        }  
    },  
    init:function() {  
        if(!this.pos)  
            throw Error("Invalid arguments [pos].");  
        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[i];
	new fixPosition(cur,cur.getAttribute("pos"));
}
new fixPosition(divs[length-2],{left:60,top:160});
new fixPosition(divs[length-1],{right:200,bottom:50});
</script>
</html>





via sohighthesky
分享到:
评论

相关推荐

    div跟随固定在浏览器左边,上下不浮动,左右可跟随主体浮动

    我们已经在`position: fixed`下实现了这一点,因为固定定位的元素不会受其他浮动元素的影响。 综上所述,要实现这个效果,我们需要结合HTML结构、CSS样式以及可能的JavaScript/jQuery交互。通过正确地设置`div`的`...

    jquery.floatdiv 浮动层固定位置

    jquery.floatdiv 浮动层固定位置 /*说明:可以让指定的层浮动到网页上的任何位置,当滚动条滚动时它会保持在当前位置不变,不会产生闪动*/ /*调用: 1 无参数调用:默认浮动在右下角 $("#id").floatdiv(); 2 内置...

    jquery 兼容所有浏览器的浮动div位置控制+例子

    jquery 兼容所有浏览器的浮动div位置控制+例子 jquery 兼容所有浏览器的浮动div位置控制+例子 jquery 兼容所有浏览器的浮动div位置控制+例子 jquery 兼容所有浏览器的浮动div位置控制+例子 jquery 兼容所有浏览器的...

    在页面固定div位置实示例

    在网页设计中,固定div(固定定位)是一种常见的布局技巧,它使得div元素在页面滚动时仍然保持在屏幕的特定位置,例如顶部导航、侧边栏等。本示例将探讨两种实现页面固定div位置的方法,并进行比较。 方法一:CSS ...

    jquery 可拖动浮动DIV ,可固定DIV

    `stop`事件处理器则在拖动结束时检查是否需要固定,如果未固定,则根据当前位置固定元素。 通过这种方式,我们可以创建一个既可拖动又可固定在屏幕任意位置的浮动DIV,提升用户的交互体验。当然,实际应用中可能还...

    CCS固定位置,DIV固定位置

    在本主题“CCS固定位置,DIV固定位置”中,我们将深入探讨如何使用CSS来实现元素在页面上的固定定位,特别是关于`div`元素的固定定位。 首先,理解CSS的定位模式是关键。有四种基本的定位方式:正常流(Normal Flow...

    div弹出层 定位问题的 处理

    在实现弹出层时,我们通常将`div`设置为绝对或固定定位,使其能脱离文档流,独立于其他元素显示。 1. **绝对定位**:使用`position: absolute;`可以让`div`相对于最近的非静态定位祖先元素进行定位。如果没有这样的...

    DIV固定位置

    `DIV固定位置` 的概念指的是将一个 `div` 元素设置为固定定位(fixed positioning),使其在页面上保持在特定的位置,即使用户滚动页面,该 `div` 也不会移动。这种技术在创建导航栏、侧边栏或固定通知等元素时特别...

    jQuery超强div固定位置布局特效插件

    这款基于jQuery的插件允许开发者实现div元素在页面滚动时保持在特定位置的效果,如固定侧边栏、顶部导航或者浮动按钮。这种布局方式能够确保关键信息始终可见,提高用户交互性。 首先,我们要理解jQuery库。jQuery...

    DIV弹出层+定位

    此外,为了确保弹出层在页面滚动时仍然保持在固定位置,可能需要使用`position:fixed`,这样它就会相对于浏览器窗口定位。但在这个描述中,弹出层的定位方式是固定的,所以`position:absolute`应该足够满足需求。 ...

    固定div,滚动到顶部固定

    然而,固定定位在滚动到顶部时可能需要特别处理,以确保元素在达到特定位置时切换到固定状态。 在JavaScript中,我们可以通过监听滚动事件(`scroll`事件)来检测用户的滚动行为。当页面滚动到某个点,比如div的...

    四个div优美实用的浮动层

    在这些浮动层中,jQuery用于控制div的显示、隐藏、定位以及动画效果。 2. **浮动层原理** 浮动层,也称为弹出框或对话框,是一种在网页上显示额外信息或功能的交互方式。它们通常出现在主页面内容之上,不影响其他...

    详细说明了div怎么在div上实现浮动的代码

    本文将深入探讨如何通过CSS样式实现`div`元素的浮动,以达到在另一个`div`上浮动的效果,同时我们也会提及在.NET环境中如何应用这些技术。 首先,让我们了解什么是浮动(Floating)。在CSS中,`float`属性主要用于...

    js模拟浏览器 Ctrl+F 查找 + div层鼠标拖动 改变位置

    js模拟浏览器 Ctrl+F 查找 + div层鼠标拖动 改变位置 两个功能demo js模拟浏览器 Ctrl+F 查找 + div层鼠标拖动 改变位置 两个功能demo js模拟浏览器 Ctrl+F 查找 + div层鼠标拖动 改变位置 两个功能demo js模拟...

    web div浮动广告

    CSS的`position`属性可以设置为`static`(默认值,遵循正常文档流)、`relative`(相对于其正常位置定位)、`absolute`(相对于最近的非静态定位祖先元素定位)或`fixed`(相对于浏览器窗口定位)。在浮动广告场景中...

    如何让DIV固定在页面的某个位置而不随着滚动条随意滚动

    "让DIV固定在页面的某个位置而不随着滚动条随意滚动" 在前端开发中,我们常常需要让某个DIV元素固定在页面的某个位置,而不随着滚动条的滚动而移动。这可以通过使用CSS的position属性来实现,特别是使用fixed值。...

    页面 浮动层定位 jquery

    而固定定位则相对于浏览器窗口定位,即使在滚动时也始终保持在屏幕的某个位置。 要实现"页面浮动层定位",我们通常使用固定定位。例如,我们可以在CSS中设置一个div元素的`position`属性为`fixed`,然后指定它的`...

    div在右下角浮动

    浮层 广告 div右下角浮动 右下角浮动 浮动窗口。 兼容性良好。 很好用漂亮的东西。值得研究。

    div浮于页面固定位置、展开与隐藏、锚点定位

    当设置`position`为`fixed`时,div元素将相对于浏览器窗口保持固定位置,即使页面滚动也不会改变其位置。例如: ```css .fixed-div { position: fixed; top: 20px; /* 设置距离顶部的距离 */ right: 20px; /* ...

    CSS基础学习之定位—流定位 浮动定位 相对定位 绝对定位 固定定位 粘性定位

    CSS基础声明定位定位简介流定位浮动定位相对定位绝对定位固定定位粘性定位堆叠顺序定位属性总结 定位 定位简介 定位:定义元素框相对于其正常位置应该出现的位置,或者相对于父元素、另一个元素甚至浏览器窗口本身的...

Global site tag (gtag.js) - Google Analytics