zoukankan      html  css  js  c++  java
  • JavaScript--DOM元素尺寸和位置(22)

    一 获取元素的CSS大小

    1 1.通过style内联获取元素的大小
    2     var box = document.getElementById('box');    // 获得元素;
    3     box.style.width;                             // 200px;
    4     box.style.height;                            // 200px; 
    5 // PS:style获取只能取到行内style属性的CSS样式中的宽和高,如果有,则获取;如果没有则返回空;
    1 2.通过计算获取元素的大小
    2     var style = window.getComputedStyle ? window.getComputedStyle(box,null) : null || box.currentStyle;
    3     style.width;                                // 200px;
    4 // PS:通过计算获取元素的大小,无关是行内/内联或链接,它返回经过计算后的结果;
    5 // 如果本身设置大小,它会返回元素的大小;如果本身没有设置,非IE会返回默认的大小,IE会返回auto;
    1 3.通过CSSStyleSheet对象中的cssRules(或rules)属性获取元素的大小;
    2     var sheet = document.styleSheets[0];            // 获取link或style;
    3     var rule = (sheet.cssRules || sheet.rules)[0];  // 获取第一条规则;
    4     rule.style.width;                               // 200px;
    5 // PS:cssRules只能获取到内联和链接样式的宽和高,不能获取到行内和计算后的样式;

    // 总结:以上三种CSS获取元素大小的方法,只能获取元素的CSS大小,却无法获取元素本身实际的大小;比如加上内边距/滚动条/边框之类的;

    二 获取元素实际大小

     1 1.clientWidth和clientHeight
     2 // 这组属性可以获取元素可视区的大小,包含元素内容内边距所占据的空间大小;
     3     box.clientWidth;                                // 200;
     4     // PS:返回了元素大小,但没有单位,默认单位是px;
     5     // PS:对于元素的实际大小,clientWidth和clientHeight理解如下:
     6     // 1.元素增加边框,无变化,200;
     7     // 2.元素增加外边框,无变化,200;
     8     // 3.增加滚动条,最终值=原本大小-滚动条大小;184;
     9     // 4.增加内边距,最终值=原本大小+内边距大小;220;
    10 // PS:如果没有设置任何CSS的width和height,那么非IE会算上滚动条和内边距的计算后的大小;而IE则返回0;
    1 2.scrollWidth和scrollHeight
    2 // 这组属性可以获取没有滚动条的情况下,元素内容的总高度;
    3     box.scrollWidth;
    4     // PS:返回了元素大小,默认单位是px;如果没有设置任何CSS的width和height,它会得到计算后的宽度和高度;
     1 3.offsetWidth和offsetHeight
     2 // 这组属性可以返回元素实际大小,包含边框/内边距滚动条;
     3     box.offsetWidth;                                // 200
     4     // PS:返回了元素大小,默认单位是px;如果没有设置任何CSS的width和height,它会得到计算后的宽度和高度;
     5     // PS:对于元素的实际大小,理解如下:
     6     // 1.增加边框,最终值=原本大小+边框大小;220;
     7     // 2.增加内边距,最终值=原本大小+内边距大小;220;
     8     // 3.增加外边据,无变化;
     9     // 4.增加滚动条,无变化,不会减小;
    10 
    11 // PS:对于元素大小的获取,一般是块级(block)元素并且已设置了CSS大小的元素较为方便;

    三 获取元素周边大小

    1 1.clientLeft和clientTop
    2 // 这组属性可以获取元素设置了左边框和上边框的大小;
    3     box.clientLeft;                                     // 获取左边框的宽度;
     1 2.offsetLeft和offsetTop(偏移量)
     2 // 这组属性可以获取当前元素边框相对于父元素边框的位置;
     3     box.offsetLeft;                                    // 50;
     4     // PS:获取元素当前相对于父元素的位置,最好将它设置为定位position:absolute;
     5     // PS:加上边框和内边距不会影响它的位置,但加上外边据会累加;
     6 
     7     box.offsetParent;                                 // 得到父元素;
     8     // PS:offsetParent中,如果本身父元素是<body>,非IE返回body对象,IE返回html对象;
     9     // 如果两个元素嵌套,如果上级父元素没有使用定位position:absolute,那么offsetParent将返回body或html对象;
    10 
    11 // 如果说在很多层次里,外层已经定位,获取任意一个元素距离页面上的位置,可以不停的向上回溯获取累加来实现;
    12     box.offsetTop+box.offsetParent.offsetTop;         // 只有两层的情况下;
    13     // 如果多层的话,就必须使用循环或递归;
    14     function offsetLeft(element){
    15         var left = element.offsetLeft;                // 得到第一层距离;
    16         var parent = element.offsetParent;            // 得到第一个父元素;
    17         while(parent !== null){                       // 判断如果还有上一层父元素;
    18             left += parent.offsetLeft;                // 将得到的距离累加;
    19             parent = parent.offsetParent;             // 将父元素也回溯;
    20         }                                             // 然后循环;
    21         return left;                                  // 得到最终距离;
    22     }
     1 3.scrollTop和scrollLeft
     2 // 这组属性可以获取被滚动条隐藏的区域大小,也可设置定位到该区域;
     3     box.scrollTop;                                    // 获取滚动内容上方的位置;
     4 
     5 // 设置滚动条滚动到最初始的位置;
     6     function scrollStart(element){
     7         if(element.scrollTop != 0){
     8             element.scrollTop = 0;
     9         }
    10     }

    四 getBoundingClientRect()方法

     1 // 这个方法返回一个矩形对象,包含四个属性:left/top/right和bottom;
     2 // 分别表示元素各边页面上边和左边的距离;
     3     var box = document.getElementById('box');
     4     alert(box.getBoundingClientRect().top);        // 元素上边距离页面上边的距离;
     5     alert(box.getBoundingClientRect().right);      // 元素右边距离页面左边的距离;
     6     alert(box.getBoundingClientRect().bottom);     // 元素下边距离页面上边的距离;
     7     alert(box.getBoundingClientRect().left);       // 元素左边距离页面左边的距离;
     8     // PS:IE/Firefox/Opera/Chrome/Safari都支持;
     9     // 但在IE中,默认坐标从(2,2)开始计算,导致最终距离比其他浏览器多出两个像素;
    10     document.documentElement.clientTop;            // 非IE为0,IE为2;
    11     document.documentElement.clientLeft;           // 非IE为0,IE为2;
    12 // 兼容getBoundingClientRect()
    13     function getRect(element){
    14         var rect = element.getBoundingClientRect();
    15         var top = document.documentElement.clientTop;
    16         var left = document.documentElement.clientLeft;
    17         return {
    18             top:rect.top-top,                     // 元素上边距-页面的上边距(0-0或2-2);
    19             bottom:rect.bottom-top,
    20             left:rect.left-left,                  // 元素左边距-页面的左边距(0-0或2-2);
    21             right:rect.right-left
    22         }
    23     };

    五 小结

    // 1.偏移量(offset dimension):包括元素在屏幕上占用的所有可见的空间;
    //   元素的可见大小由其高度和宽度决定,包括内边距/滚动条和边框;
    // 2.客户区大小(client dimension):指的是元素内容及其内边距所占据的空间大小;
    // 3.滚动大小(scroll dimension):包含滚动内容的元素的大小;
  • 相关阅读:
    textdecoration、textdecorationcolor、textdecorationline、textdecorationstyle属性
    深入解读Promise对象
    如何将WCF服务发布到IIS中去VS2010版
    iPhone 常用面试题目
    WCF入门简单教程(图文) VS2010版
    VS2010中如何创建一个WCF
    ObjC: 使用KVO
    iOS面试重点问题
    iOS开发面试题
    《Iphone开发基础教程》第五章 自动旋转和调整大小
  • 原文地址:https://www.cnblogs.com/yizihan/p/4384693.html
Copyright © 2011-2022 走看看