JS中的位置和宽度:clientWidth、offsetWidth、scrollWidth,clientTop和clientLeft等区别

 下面说的这三种宽,都是基于元素被加入到DOW渲染树后,也就是被添加到页面中以后,才可以获取。并且图片这类后加载元素无法获取宽。

 clientWidth  客户宽   offsetWidth  偏移宽  scrollWidth  滚动宽

  直接获取样式的宽度得到的是样式值,带有px单位。

  通过 div.clientWidth 获取到的是样式的数值,是没有单位的。他们一个是字符串,一个是数值。

  div.clientWidth 的值是 width+padding ,有滚动条的时候:width+padding-17(17是滚动条宽度)。

  div.offsetWidth 的值是 width+padding+border ,有滚动条的时候:是实际这个div的占位宽度

  div.scrollWidth 的值是 width+padding ,有滚动条的时候:因为内容宽度不同,实际内容宽度+padding

  在运用的时候,我们想要获取元素的宽度,如果不需要滚动条宽度,就可以用 clientWidth 。如果想要获取元素实际宽度就用 offsetWidth 。如果想要获取元素内部的宽,就用 scrollWidth 。

<style>
   div{width: 100px;height: 100px;border: 10px solid #000;padding: 10px;margin: 10px;overflow: scroll;}
</style>   

 <div>

    ssssssssssssssssssssssssssssssssss</br>sssssssssssssssssssssssssssssss水水水水水水水水水水水水水水水水水水水s

 </div>

 var div=document.querySelector("div");

 console.log(getComputedStyle(div).width);//样式值 100px

 console.log(div.clientWidth);//样式的数值 120 width+padding 有滚动条 width+padding-17(滚动条宽度) 103

 console.log(div.offsetWidth);//140 width+padding+border 有滚动条时 实际这个div的占位宽度 140

 console.log(div.scrollWidth);//120 width+padding 有滚动条 因为内容宽度不同,实际内容宽度+padding 272

 

元素以外的宽高,页面宽高 

 document.body.clientWidth   获取的是页面的可视宽度-16(默认左右各8个像素的margin值)

 document.documentElement.clientWidth 获取的是页面的可视宽度,可视宽度并不会因为页面的内容大而撑开

body的offsetWidth和clientWidth相同 。offsetWidth 获取的是html页面的可视宽度,有内容时,宽度仍然是可视宽度

没有内容时scrollWidth和body的clientWidth相同。有内容时,就是内容宽度如果没有body没有高度,则是可视宽高。如果body有宽度,不超过可视宽度,则是可视宽度。如果body的宽度超出可视范围,则是body宽度+margin(宽度+margin)。见图1、图2
console.log(document.body.clientWidth);
console.log(document.documentElement.clientWidth);
console.log(document.body.offsetWidth);
console.log(document.documentElement.offsetWidth);
console.log(document.body.scrollWidth);
console.log(document.documentElement.scrollWidth);

图1

图2

 clientTop  clientLeft

 clientTop  clientLeft 就是边线宽高。跟定位没有任何关系,如果没有设置边宽,那就是0。见图3

<style>
      #div0 {width:200px;height:200px;padding:50px;margin:50px;border:2px solid #000;}
      #div1 {width:100px;height:100px;background-color:red;border:1px solid #000;overflow: auto;}
</style>
    <div id="div0">
          <div id="div1"></div>
    </div>
    <script>
      var div1 = document.getElementById("div1");
      //   边线宽高
        console.log(div1.clientLeft,div1.clientTop);
    </script>

图3

原文地址:https://www.cnblogs.com/wenqianqian/p/12643935.html

时间: 2024-08-28 10:45:09

JS中的位置和宽度:clientWidth、offsetWidth、scrollWidth,clientTop和clientLeft等区别的相关文章

JS中关于clientWidth offsetWidth scrollWidth 等的含义

转载,原文:http://www.cnblogs.com/fullhouse/archive/2012/01/16/2324131.html 网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offsetWidth   (包括边线的宽);网页可见区域高: document.body.offsetHeight  (包括边线的宽);网页正文全文宽: documen

js中的clientWidth offsetWidth scrollWidth等的含义

网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offsetWidth   (包括边线的宽);网页可见区域高: document.body.offsetHeight  (包括边线的宽);网页正文全文宽: document.body.scrollWidth;网页正文全文高: document.body.scrollHeight;网页被卷去的高: documen

JS中关于clientWidth offsetWidth scrollWidth 的区别及意义

网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offsetWidth   (包括边线的宽);网页可见区域高: document.body.offsetHeight  (包括边线的宽);网页正文全文宽: document.body.scrollWidth;网页正文全文高: document.body.scrollHeight;网页被卷去的高: documen

clientWidth offsetWidth scrollWidth的区别

scrollWidth  是对象的实际内容的宽,不包边线宽度,会随对象中内容的多少改变(内容多了可能会改变对象的实际宽度). clientWidth  是对象可见的宽度,不包滚动条等边线,会随窗口的显示大小改变.  offsetWidth  是对象的可见宽度,包滚动条等边线,会随窗口的显示大小改变. 一个scrollWidth和clientWidth的例子:  <html>  <head>  <title>77.htm文件</title>  </hea

关于 clientWidth offsetWidth scrollWidth的理解

<!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-

js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别

js中有两种声明函数的方法,分别为: var functionOne = function() { // Some code }; function functionTwo() { // Some code } 为什么会有两种不同的方法?每个方法的优点和缺点分别是什么?有什么情况是一种方法能完成而另外一种方法不能完成的吗? 答: by @Greg 不同点在于functionOne只会在到达赋值的那一行才会被真正定义,而functionTwo会在 包含它的函数或script脚本 执行的时候马上被定

js中的var a = new A;与var a = new A()的区别

JavaScript 中的new关键字与C#,JAVA中的概念完全不一样.  例:var a=new A();  让我们来看看在JavaScript中的new发生了什么?  var a={};//建立了一个新对象:  a.__proto__=A.prototype; //将a的原型指向A:那么a就继承了A的方法与属性!  A.call(a);//调用了A里的构造函数:  document.write(a.__proto__===A.prototype);//为true (ie不支持!因为在IE中

js中return 、return false 、return true、break、continue区别

在开发中不熟悉这三者区别的同学,一般都知道return可以中止,但会根据字面意思觉得return true 中止当前函数执行,但其后的函数还会继续执行.return false 中止当前函数执行,其后的函数不会执行,这是错误的想法.先看下面控制台的例子 一:可以看出三者都中止了函数执行,return后的语句不再执行,唯一区别是函数的返回值不同. 二:return只是中止当前函数,与其后的函数没有关系, 可见return只是中止当前函数对其后函数没有影响 三:对于函数中的for循环里的return

js中构造函数的原型添加成员的两种方式

首先,js中给原型对象添加属性和方法. 方式一:对象的动态特效 给原型对象添加成员 语法:构造函数.prototype.方法名=function (){ } 方式二:替换原型对象(不是覆盖,而是替换,把原先的同名的直接替换成现在的) 语法:构造函数.prototype.方法名={ } tips:方式二不常用,因为这样会修改了原型本身 搜索:JS中通过构造函数添加成员方法和通过原型法添加成员方法的区别 参考网址  http://blog.csdn.net/xxmzumeng/article/det