JS闯关之路webWeb前端之路

Javascript中的盒子模型

2017-05-17  本文已影响63人  icessun

说起盒子模型,我们首先会想到css盒子模型,主要是针对标准浏览器和非标准浏览器而言,其由四个部分组成:手动设置的宽高+padding(内边距)+border+margin(外边距)
当然,我们的js也有所谓的盒子模型,主要是通过元素身上的属性和方法,来获取元素身上的样式值

client系列:可视区,视口,浏览器客户端

offset系列:偏移量,只能获取不是设置,得到的是数值

通过offserLeft和offsetTop可以计算一个元素的位置
// 思路:计算一个元素的位置  那么要传入这个元素参数,返回位置(以对象的形式返回)
function getElePosition(ele){
    var x=0,y=0;
    while(ele!=null){
         x+=e.offsetLeft;
         y+=e.offsetTop;
         e=e.offsetParent;
     }
     return {
                x:x,
                y:y
            };

}

scroll系列:滚动区

JS盒子模型兼容的写法

if(document.compatMode == "BackCompat") {//渲染方式
    wHeight = document.body.clientHeight;
}else {//"CSS1compat"
    wHeight = document.documentElement.clientHeight;
}

其他的补充

封装思想

由于上面的js盒子模型中,我们遇到几个问题:1. 取到的值都是复合值,无法取到单独的宽和高;2. 盒子的偏移量只能取到当前元素外边框到定位父级元素内边框的距离,无法获取当前元素到body的距离;3. 求可视区的宽高和被浏览器卷去的宽度和高度比较麻烦;基于上面的一些问题,我们可以进行封装。

区别结构父级和定位父级

结构父级:parentNode,其最大的元素是Html
定位父级:offsetParent,其最大的元素是body

<body class="body">
<div class="divOuer" id="divOuer">divOuter
    <div class="divCenter" id="divCenter">divCenter //这个相对定位
        <div class="divInner" id="divInner">divInner</div> //这个绝对定位
    </div>
</div>


<script>
    var oInner=document.getElementById('divInner');
    //需求:想找到所有的结构父级;思路:必须先找到第一个结构父级,一层层往上找;
    var par=oInner.parentNode;
    while(par){
        alert(par.className);  //结果是:divCenter divOuter body html undefined(说明className不能加到!DOCTYPE html上面)
        par=par.parentNode;
    }
    //需求:找到inner所有的定位父级
   var par=oInner.offsetParent;
  while(par){
       alert(par.className); // 结果是:divOuer body
        par=par.offsetParent;
    }
</script>
上一篇 下一篇

猜你喜欢

热点阅读