JS笔记(18): 盒子模型属性

1、client系列

  • clientWidth & clientHeight: 获取当前元素可视区的宽高(内容的宽高+左右/上下padding)
  • clientTop & clientLeft: 获取上/左边框的宽度

内容和是否有溢出无关(和是否设置了overflow: hidden无关,就是咱们本身及设定的内容的宽高padding浏览器

2、offset系列

  • offsetWidth & offsetHeight: 内容的宽高+左右/上下padding+左右/上下border(和内容是否溢出无关)

  • offsetParent: 当前盒子的父级参照物spa

    • 参照物:同一个平面当中,元素的父级参照物和结构没有必然联系,默认他们的父级参照物都是body(当前平面最外层的盒子)
    • body的父级参照物为null
  • offsetTop/offsetLeft:3d

    • 获取当前盒子距离其父级参照物的偏移量(上偏移/左偏移)
    • 当前盒子的外边框开始 - 父级参照物的内边框

图示:code

  • 例如上面结构中:

outer.offsetParent //=>bodycdn

inner.offsetParent //=>body对象

center.offsetParent //=>bodyblog

  • 参照物能够改变:文档

    • 构建出不一样的平面便可(使用zIndex,可是这个属性只对定位有做用),因此改变元素的定位(position:relative/absolute/fixed),能够改变其父级参照物
  • 例如上面结构中,get

若是给outer设置position:relative以后(把outer脱离原有的平面,独立出一个新的平面,后代元素的父级参照物都会以他为参考)it

inner.offsetParent //=>outer

center.offsetParent //=>outer

outer.offsetParent //=> body

  • 上面结构中:

若是给inner设置position:absolute以后

center.offsetParent //=>inner

inner.offsetParent //=>outer

outer.offsetParent //=>body

获取当前元素距离body的偏移量

  • 无论父级参照物是谁,都要获取当前元素距离body的偏移量(左偏移/上偏移)
  • 不能改变既定的样式(不能基于position方式改变他的参照物)
  • 任意元素距离body的偏移(无论参照物)
    • 1.首先获取当前元素的左偏移
    • 2.在这个基础上累加
      • A.父级参照物的边框
      • B.父级参照物的偏移
    • 累加完父级的,再找父级的父级(A),加上A的左边框和左偏移,加到父级参照物是body为止

3、scroll系列

  • scrollWidth & scrollHeight: 真实内容的宽高+左/上padding
    • 是一个约等于的值,在不一样浏览器当中,或者是否设置overflow: hidden,都对结果有影响,因此这个值只作参考
    • 不必定是本身设定的值,由于可能会存在内容溢出,若是有内容溢出,须要把溢出的部分算上,若是没有内容溢出,和client同样
    • 获取当前页面的真实宽高,包含溢出部分
  • scrollTop/scrollLeft: 滚动条卷曲的宽度/高度
    • 在JS盒子模型13个属性中,只有scrollTop/scrollLeft是可读可写属性,其他都是只读属性
    • 最小卷去值:0
    • 最大卷去值:真实页面的高度 - 一屏幕的高度 document.documentElement.scrollHeight - document.documentElement.clientHeight

4、获取元素样式值

1) 经过JS盒模型属性获取值的特色:

  • 1.获取的都是数字,不带单位
  • 2.获取的都是整数,不会出现小数(通常都是四舍五入,尤为是获取的偏移量)
  • 3.获取的结果都是复合样式值(好几个元素样式组合在一块儿的值),若是只想获取单同样式值,例如只想得到padding值,盒子模型属性没法操做

2) 获取元素具体的某个样式值:

  • 1.元素.style.xxx :只能获取全部写在元素行内上的样式(不写在行内上,获取不到)
  • 2.window.getComputedStyle([元素],null)

获取当前元素全部通过浏览器计算的样式:只要当样式前元素能够在页面中展示(或者浏览器渲染它了,那么他的样式都是被浏览器计算过的)

2.1 无论当前样式写在哪
2.2 无论当前样式写没写(浏览器会给元素设置一些默认样式)
复制代码

5、关于可视区的宽高

  • 获取当前元素一屏内(可视区域)的宽度和高度

    • 宽: document.documentElement.clientWidth || document.body.clientWidth
    • 高: document.documentElement.clientHeight || document.body.clientHeight
    • 不算横向滚动条的高度,值是固定的
  • 获取可视区的宽高(window对象):只读属性

    • 宽:window.innerWidth
    • 高:window.innerHeight

document.documentElement.clientWidthwindow.innerWidth的区别图示

高度同理

6、关于滚动条的距离

  • 获取当前页面的真实宽高,包含溢出部分

    • 宽:document.documentElement.scrollWidth || document.body.scrollWidth
    • 高:document.documentElement.scrollHeight || document.body.scrollHeight
    • 不算横向滚动条的高度,值是固定的,可读可写

图示: document.documentElement.scrollHeightdocument.documentElement.clientHeight的区别

  • 滚动条到顶部/左部的距离(值不固定,随滚动条滚动而变化,只读属性)
    • window.pageXOffset: 滚动条到左边的距离(X轴)

    • window.pageYOffset: 滚动条到顶部的距离(Y轴)

    • 在IE低版本下

      • document.documentElement.scrollLeft 滚动条到左边的距离(X轴)
      • document.documentElement.scrollTop滚动条到顶部的距离(Y轴)

  • 将文档滚动到指定位置
    • window.scrollTo(x,y)
    • 它接受两个参数,表示滚动后位于窗口左上角的页面坐标。
    • 此属性可写不可读

7、getBoundingClientRect()

getBoundingClientRect() : 获取元素到页面可视区的尺寸、距离

  • 注意: 是跟滚动条走的
  • x:元素左上角相对于视口的横坐标
  • y:元素左上角相对于视口的纵坐标
  • height:元素高度
  • width:元素宽度
  • left:元素左上角相对于视口的横坐标,与x属性相等
  • right:元素右边界相对于视口的横坐标(等于x + width)
  • top:元素顶部相对于视口的纵坐标,与y属性相等
  • bottom:元素底部相对于视口的纵坐标(等于y + height)

相关文章
相关标签/搜索