美文网首页
JS的offsetWidth、clientWidth等相关属性

JS的offsetWidth、clientWidth等相关属性

作者: 鲁女女 | 来源:发表于2019-12-17 20:47 被阅读0次

offsetWidth 和 offsetHeight

使用offsetWidth是获取元素的尺寸的(content+padding+border)宽度
offsetWidth是获取元素宽度最好的方法
如果元素以display:none的形式隐藏掉了,那么这个元素的offsetWidth宽度是0

#box{
  width: 100px;
  height: 100px;
  background-color: red;
  padding: 20px;
  border: 1px solid #000;
  margin: 10px;
/*如果加了dispaly为none,则获取的宽度为0*/
  /*display: none;*/
}
var oBox = document.getElementById("box");
console.log(oBox.offsetWidth); //142

clientWidth和clientHeight

使用clientWidth是获取元素可视化部分的宽度(content + padding的和) 不含边框

#box{
  width: 100px;
  height: 100px;
  background-color: red;
  padding: 20px;
  border: 1px solid #000;
  margin: 10px;
/*如果加了dispaly为none,则获取的宽度为0*/
  /*display: none;*/
}
var oBox = document.getElementById("box");
console.log(oBox.clientWidth); //140

scrollWidth和scrollHeight

scrollWidth是获取元素的滚动宽度(包含的内容的完全的宽度 + 自身的padding),外边距只会算一边。

#box{
   width: 100px;
   height: 100px;
   background-color: red;
   padding: 20px;
   border: 1px solid #000;
   margin: 30px;
   overflow: auto;
}
#con{
   width: 1000px;
   height: 80px;
   padding: 20px;
   border: 1px solid red;
   margin: 10px;
}
<div id="box">
    <div id="con"></div>
</div>
 var oBox = document.getElementById("box");
 console.log(oBox.scrollWidth);//1000+40+2+20 + 20自身padding= 1072

获取窗口的大小

  • 在js中 提供了两个简便的操作 document.documentElement === html标签,document.body === body标签.
  • 获取html标签的clientWidthclientHeight属性,就可以获取到浏览器窗口的宽高在怪异模式下,body是顶层的可视元素,所以在怪异模式下获取窗口的大小是document.body.clientWidth.
  • 兼容性写法: document.documentElement.clientWidth || document.body.clientWidth
var oHtml = document.getElementsByTagName("html")[0];
var oBody = document.getElementsByTagName("body")[0];
console.log(document.documentElement === oHtml);//true
console.log(document.body === oBody);//true

// 打印浏览器窗口的宽高
console.log(document.documentElement.clientHeight);
console.log(document.documentElement.clientWidth);

//获取窗口高度的兼容性写法
console.log(document.documentElement.clientWidth || document.body.clientWidth);
console.log(document.documentElement.clientHeight || document.body.clientHeight );

offsetLeft和offsetTop

返回当前元素的偏移值
在标准模式下以最近的定位父级为参考的偏移位置(无论这个元素是否定位)

<div id="outer">
    <div id="inner">
        <div id="con"></div>
    </div>
</div>
*{margin:0;padding:0;}
#outer{
    width: 500px;
    height: 500px;
    margin: 50px;
    overflow: hidden;
    background-color: red;
    padding: 10px;
    border: 1px solid #000;
    position: relative;
}
#inner{
    width: 300px;
    height: 300px;
    background-color: yellow;
    margin: 20px;
    padding: 10px;
    border: 1px solid #ccc;
    /*position: relative;*/
}
#con{
      width: 100px;
      height: 100px;
      margin: 10px;
      /*position: absolute;*/
      /*left: 40px;*/
      /*top: 40px;*/
      background-color: #0ee69c;
}
var oCon = document.getElementById("con");
console.log(oCon.offsetLeft); //51

offsetParent

获取一个元素最近的定位父级 返回的是定位父级这个元素

<div id="outer">
    <div id="inner">
        <div id="con"></div>
    </div>
</div>
#outer{
    width: 500px;
    height: 500px;
    margin: 50px;
    overflow: hidden;
    background-color: red;
    padding: 10px;
    border: 1px solid #000;
    position: relative;
}
#inner{
     width: 300px;
     height: 300px;
     background-color: yellow;
     margin: 20px;
     padding: 10px;
     border: 1px solid #ccc;
     position: relative;
}
#con{
     width: 100px;
     height: 100px;
     margin: 10px;
     position: absolute;
     left: 40px;
     top: 40px;
     background-color: #0ee69c;
}
/*
    * offsetParent
    *  获取一个元素最近的定位父级 返回的是定位父级这个元素
    * 
*/
var oCon = document.getElementById("con");
console.log(oCon.offsetParent); //<div id="inner"><div id="con"></div></div>

clientLeft和clientTop

获取左边框和上边框的大小

<div id="outer">
    <div id="inner">
        <div id="con"></div>
    </div>
</div>
#outer{
    width: 500px;
    height: 500px;
    margin: 50px;
    overflow: hidden;
    background-color: red;
    padding: 10px;
    border: 1px solid #000;
}
#inner{
    width: 300px;
    height: 300px;
    background-color: yellow;
    margin: 20px;
    padding: 10px;
    border: 10px solid #ccc;
}
#con{
     width: 100px;
     height: 100px;
     margin: 10px;
     border: 5px solid red;
     background-color: #0ee69c;
}
 /*
    * 设计位置-clientLeft和clientTop
    * 获取左边框和上边框的大小
    * parentNode是父节点
    *
 */
var oCon = document.getElementById("con"); 
console.log(oCon.clientLeft); //5
console.log(oCon.parentNode.clientLeft); //10
console.log(oCon.parentNode.parentNode.clientLeft); //1

整体文档大小的宽高

对于标准DOM模式来说 就是获取html的宽高
对于非标准模式,就是获取body的宽高
兼容性代码:document.documentElement.offsetHeight || document.body.offsetHeight;

<button id="btn">点一下</button>
<div id="outer"></div>
#outer{
     width: 200px;
     height: 2000px;
     border: 1px solid #000;
     overflow: auto;
}
#btn{
     position: fixed;
     left: 0;
     top: 50%;
}
var oOuter = document.getElementById("outer");
var oBtn = document.getElementById("btn");
oBtn.onclick = function () {
      console.log(document.documentElement.offsetWidth || document.body.offsetWidth); //整体文档的宽看个人电脑
      console.log(document.documentElement.offsetHeight || document.body.offsetHeight); //2002
}

scrollLeft和scrollTop

可以读写向左或向上 移出可视区域外的宽度或高度
其实就是滚动条已经滚过的距离

<button id="btn">点一下</button>
<div id="outer">
    <div id="con"></div>
</div>
#outer{
    width: 200px;
    height: 200px;
    border: 1px solid #000;
    overflow: auto;
}
#con{
    width: 2000px;
    height: 2000px;
    background-color: pink;
}
 /*
    * scrollLeft和scrollTop:
    *   - 可以读写向左或向上 移出可视区域外的宽度或高度
    *   - 其实就是滚动条已经滚过的距离
    * 
*/
    var oOuter = document.getElementById("outer");
    var oBtn = document.getElementById("btn");
    oBtn.onclick = function () {
        // oOuter.scrollLeft = 200;  //可写操作
        console.log(oOuter.scrollLeft);
        console.log(oOuter.scrollTop);
    }

相关文章

网友评论

      本文标题:JS的offsetWidth、clientWidth等相关属性

      本文链接:https://www.haomeiwen.com/subject/tklenctx.html