BOM之三大系列(offset-scroll-client)

offset系列

定位父级(偏移父级)
  • offsetParent(偏移父级):返回与当前元素最近的经过定位(position不等于static)的父级元素,有如下情况:
    • 若当前元素的父级元素没有进行CSS定位,offsetParent为body.
    • 若当前元素自身有fixed定位,则返回null.(火狐返回body)
    • 如果当前元素(自身无fixed定位)的父级元素中有进行CSS定位,offsetParent为离自身元素最近的有CSS定位的父级元素.
    • body元素offsetParent返回null
偏移量
  • offsetWidth:

    • 获取元素的可视宽度,无单位.
    • 这个宽度包括元素的边框(border),水平 的padding,垂直滚动条宽度,元素本身宽度. (它不包括伪元素的宽度,如::before 或 ::after)
    • 若元素被隐藏,则返回0.
  • offsetHeight:获取元素的可视高度,无单位;(其余上同)

  • offsetLeft:获取元素左外边框到定位父级的左内边框的像素距离;

  • offsetTop:获取元素伤外边框到定位父级的上内边框的像素距离;

    • 没有脱离文档流:offsetLeft:父级元素margin+父级元素padding+父级元素border+自己的margin;(offsetTop同理)
    • 脱离文档流:主要是自己的left(相对于父级)和自己的margin;

scroll系列(卷曲---滚出去)

  • scrollWidth:元素中内容的实际的宽(没有边框,包含内边距),如果没有内容就是元素的宽
  • scrollHeight:元素中内容的实际的高(没有边框,包含内边距),如果没有内容就是元素的高
  • scrollTop:向上卷曲出去的距离
  • scrollLeft:向左卷曲出去的距离
封装getScroll函数
    //获取浏览器向上向左卷曲出去距离的值
    function getScroll(){
            return {
                left : window.pageXOffset || document.documentElement.scrollLeft 
                       || document.body.scrollLeft || 0,
                top :  window.pageYOffset || document.documentElement.scrollTop 
                       || document.body.scrollTop || 0
            };
            
        }
    //测试
    window.onscroll = function(){
        console.log(getScroll().top);  
    };
    }
复制代码

client系列

  • clientWidth: 可视区域的宽(没有边框),边框内部的宽度
  • clientHeight: 可视区域的高(没有边框),边框内部的宽度
  • clientLeft: 左边边框的宽度
  • clientTop: 上边边框的宽度
  • clientX(clientY):到顶部左部的可视距离

pageX(pageY):获取向上卷曲与可视距离的和(仅火狐和谷歌支持)


盒子跟着鼠标飞实例

谷歌火狐支持e对象 IE8支持window.event

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>title</title>
  <style>
    *{
      margin: 0;
      padding: 0;
    }
    body{
      height: 2000px;
    }
    img{
      position: absolute;
    }
    #box{
      position: absolute;
      width: 100px;
      height: 100px;
      border: 1px solid red;
    }
    #img{
      position: absolute;
      width: 100px;
      height: 100px;
      border: 1px solid green;
    }
  </style>
</head>
<body>

<div id="box"></div>
<div id="img"></div>
<script src="common.js"></script>
<script>
  //图片跟着鼠标飞,可以中任何的浏览器中实现
  //clientX 和 clientY 单独的使用的兼容代码
  //scrollLeft 和 scroollTop 的兼容代码
  //pageX, pageY 和 clientX + scrollLeft 和 clientY + scrollTop
  
  //把代码封装在对象中
  
  var evt = {
      //window.event 和 事件参数对象e的兼容
      getEvent:function(evt){
          return window.event || e;
      },
      //可视区域的横坐标的兼容代码
      getClientX:function(evt){
          return this.getEvent(evt).clientX;
      },
      //可视区域的纵坐标的兼容代码
      getClientY:function(evt){
          return this.getEvent(evt).clientY;
      },
      //页面向左卷曲出去的横坐标
      getScrollLeft:function(){
          return window.pageXOffset || document.body.scrollLeft 
          || document.documentElement.scrollLeft || 0;
      },
      //页面向上卷曲出去的纵坐标
      getScrollTop:function(){
          return window.pageYOffset || document.body.scrollTop 
          || document.documentElement.scrollTop || 0;
      },
      //相对于页面的横坐标(pageX 或者 clientX+scrollLeft)
      getPageX:function(evt){
          return this.getEvent(evt).pageX ? this.getEvent(evt).pageX : this.getClientX(evt) + this.getScrollLeft();
      },
      //相对于页面的纵坐标(pageX 或者 clientY + scrollTop)
      getPageY:function(evt){
          return this.getEvent(evt).pageY ? this.getEvent(evt).pageY : this.getClientY(evt) + this.getScrollTop();
      }
  }
  document.onmousemove=function (e) {
    my$("box").style.left=evt.getPageX(e)+"px";
    my$("box").style.top=evt.getPageY(e)+"px";
  };

</body>
</html>
    
复制代码

------------------------------------------------------记录于 2019.4.16 JavaScript之BOM

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值