zoukankan      html  css  js  c++  java
  • javascript/dom:固定居中效果

    来源:http://www.jb51.net/article/30109.htm

    <!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" /> 
        <style> 
            body,div{padding:0px;margin:0px;} 
            #gd{width:100px;height:100px;background:#F00;color:#FFF;} 
            </style> 
            <script> 
                window.onload = function()
                { 
                    var isIE=!!window.ActiveXObject; 
                    var isIE6=isIE&&!window.XMLHttpRequest;
                    /*
                     这两句是判断浏览器。这是Aajx里的方法。也很好理解。我在这里就不多说了。大家有兴趣的可以去网上找找了解一下判断各种浏览器。 
                     * */ 
                    var t = (document.documentElement.clientHeight - document.getElementById("gd").offsetHeight)/2 + document.documentElement.scrollTop; 
                    var l = (document.documentElement.clientWidth - document.getElementById("gd").offsetWidth)/2 + document.documentElement.scrollLeft; 
                    /*
                     document.documentElement.clientHeight这个是获取当前浏览器窗口的高度。 
                     document.getElementById("gd").offsetHeight这是获取我们dom元素的实际高度。 
                     document.documentElement.scrollTop这是获取滚动条滚动的高度。 
                     * */
                    
                    /*
                     距离清楚了的话。现在我们只需要做最后一件事了。就是让滚动条滚动的时候。即时的把这个滚动的高度给加进去。
                     然后把即时的这个t和l值设置到dom的top和left属性中去。这样就能给用户造成个假象。以为这个是固定在那里的。 
                     * */
                    if(isIE6)
                    { 
                        setInterval(function()
                        { 
                            t = (document.documentElement.clientHeight - document.getElementById("gd").offsetHeight)/2 + document.documentElement.scrollTop; 
                            l = (document.documentElement.clientWidth - document.getElementById("gd").offsetWidth)/2 + document.documentElement.scrollLeft; 
                            document.getElementById("gd").style.position = "absolute";
                            document.getElementById("gd").style.top = t + "px"; 
                            document.getElementById("gd").style.left = l + "px"; 
                            },1) 
                    } 
                    else
                    { 
                        setInterval(function()
                        {
                            t = (document.documentElement.clientHeight - document.getElementById("gd").offsetHeight)/2 + document.documentElement.scrollTop; 
                            l = (document.documentElement.clientWidth - document.getElementById("gd").offsetWidth)/2 + document.documentElement.scrollLeft; 
                            document.getElementById("gd").style.position = "fixed" 
                            document.getElementById("gd").style.top = t + "px"; 
                            document.getElementById("gd").style.left = l + "px";    
                        },1)
                    }
                    /*
                     这段就是这个作用。if(isIE6)就是当isIE6这个为真时。也就是当是IE6的浏览器的时候。
                     setInterval(...,1)这个是设置个时钟让在IE6的浏览器下每隔1微秒执行一下语句。
                     也就是不断的在更新t和l的值。然后不断的付给DOM元素的top和left属性,1微秒非常快。
                     用户拉滚动条的速度不可能只需要1微秒的时间。所以用户也就不可能看出来什么。
                     以为那个就是固定在那里的。当然你也可以设置一个滚动事件windon.onscroll。也可以
                     。但是我觉得没这种好。大家有兴趣的也可以研究一下(大家别闲我啰嗦,我觉得自己多研究一下东西,比我教大家一大堆东西都有用)。 
    
                    当然如果不是IE6的浏览器都支持fixed属性。就执行这些语句了。 
                    document.getElementById("gd").style.position = "fixed"//给dom元素加一个fixed属性 
                    document.getElementById("gd").style.top = t + "px";//初始化时给dom元素设置一个居中的t值。 
                    document.getElementById("gd").style.left = l + "px";//初始化时给dom元素设置一个居中的l值 
    
                     * */ 
                } 
            </script> 
    <title>固定居中</title> 
    </head> 
    <body> 
        <div id="gd"> 
            我就在中间随便你们怎么改变窗口大小和高度 
        </div> 
        <div style="height:1200px;"></div> 
    </body> 
    </html> 
  • 相关阅读:
    arcgis for silverlight 控制图层显示级别
    Telerik for silverlight RadAutoCompleteBox 动态数据源
    ARM嵌入式学习--OK6410裸板程序--2.GPIO控制LED跑马灯(从ARM汇编跳转到C语言)
    ARM嵌入式学习--OK6410裸板程序--1.GPIO控制LED
    Linux内核移植--1.添加NAND Flash分区
    Linux 快速释放端口与释放内存缓存
    jquery ajax session超时处理
    相濡以沫不如相忘江湖
    SQL Server数据库无法启动(万金油解决办法)
    多显示器实现屏幕扩展(VGA DVI HDMI)
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/3015833.html
Copyright © 2011-2022 走看看