js 盒子模型(没写完)

盒子模型

盒子模型包括margin、border、padding、content  
js盒子模型的方法可分为:尺寸类、距离类、其它类
client系列、offset系列、scroll系列、getBoundingClientRect() 返回值都是不带单位的数字。

尺寸类:

  元素的尺寸,返回值不带单位的:
    clientHeight / clientWidth 支持(会计算)padding,不支持border
    offsetHeight / offsetWidht 支持padding,支持border 在没有设置固定宽高的时候,走被内容撑开的高度。
    scrollHeight / scrollWidht 支持padding,不支持border 但支持被内容撑开的高度。
    clientTop / clientLeft 上边框 / 左边框
  元素的尺寸,返回值带单位的:
    style.height / width 获取行间的样式。
    getComputedStyle(obj).height / width 得到元素对象计算后的样式,只能获取,不支持padding
    obj.currentStyle.height / width 也是得到计算后的样式,(同上)。用于IE低版本。
  可视区的尺寸,返回值不带单位的:
    document.documentElement.clientWidth / document.documentElement.clientHeight (会计算滚动条的宽度)
    window.innerHeight / window.innerWidth (不计算滚动条的宽度)

距离类:

  offsetTop / offsetLeft 从子元素的上 / 左外边框到定位父级的上 / 左内边框的距离(如果没有定位父级,默认走body)
  定位父级:offsetParent (let box = box1.offsetParent,可读,可写)
  ev.clientX / ev.clientY 鼠标到可视区(基于可视区)的 x、y 值
  ev.pageX / ev.pageY 鼠标到可视区(基于页面)的 x、y 值

绝对位置的计算:

ele.getBoundingClientRect().top | left | right | bottom
ele.getBoundingClientRect().left 得到当前元素左外边框到body的左边的距离,也可以用下面的例子实现:

  let obj = box3;
  let l = 0;
  let box3L = box3.clientLeft;
  
  while (obj) {
    l += obj.offsetLeft + obj.clientLeft;
    obj = obj.offsetParent;//让这次的box,变成上一次的定位父级,再次循环是就能拿到下一段距离。
    console.log(obj);
  }
  l -= box3L;
  console.log(l);

滚动距离:

  • window.pageXOffset / window.pageYOffset 只能读不能写
  • document.documentElement.scrollTop 能读也能写
  • document.body.scrollTop (IE)
  • window.scrollTo(x,y) 专门用来写滚动条的距离的

例子:ele.scrollTo(0,100) 有滚动条的时候使用,让元素滚动到指定的位置,单位px

   document.onclick = function(){
        // window.pageYOffset = 100; // 点击没有效果,
        // document.documentElement.scrollTop = 100; // 有效果
        window.scrollTo(0,100); // 有效果
    }

实现懒加载:

  1. 图片设置自定义属性比如:_url = “图片地址”
  2. 当图片顶部的高度 >= 可视区的高度 + 滚动条的高度时,让图片的 src = _url,开始加载图片

可视区的高度:
window.innerHeight (标准浏览器及IE9+) || document.documentElement.clientHeight (标准浏览器及低版本IE标准模式) || document.body.clientHeight (低版本混杂模式)

滚动条的高度:
window.pageXOffset / window.pageYOffset 只能读不能写
document.documentElement.scrollTop 能读也能写
document.body.scrollTop ( IE)
window.scrollTo(x,y) 专门用来写滚动条的距离的

posted @ 2018-11-12 22:57  真的想不出来  阅读(245)  评论(0编辑  收藏  举报