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> 
  • 相关阅读:
    学到的一种编程风格
    防止忘记初始化NSMutableArray的方法
    == 和 isEqualToString的区别之备忘
    IOS开发中--点击imageView上的Button没有任何反应
    [__NSCFString absoluteURL]错误的解决方案
    二叉树镜像
    判断树的子结构
    算法练习-贪心问题
    重建二叉树:
    IDEA搭建web项目出现中文乱码问题
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/3015833.html
Copyright © 2011-2022 走看看