js获取元素的偏移量offset简单方法(必看)


Posted in Javascript onJuly 05, 2017

前言:以前一直是看别人写的,然后学习点东西,现在也把自己的学习记录下来,给大家一个学习的机会,欢迎大家多多评论和推荐哈,共同进步。竟然还有六个人关注我了 ,哈哈 开心。我会继续写下去的。。

null和undefined都代表没有,但是null是属性存在值不存在,undefined是连这个属性都不存在

//例如
    document.parentNode//浏览器天生自带的一个属性:父亲节点的属性 null (因为一个页面中的document已经是最顶级元素了,它没有父亲)
    document.parentnode//undefined (因为没有parentnode这个属性)

1、parentNode:父亲节点  HTML结构层级关系中的上一级元素

var outer = document.getElementById('outer');
    var inner = document.getElementById('inner');
    var center = document.getElementById('center');

    center.parentNode //inner

2、offsetParent:父级参照物 在同一个平面中,最外层的元素是里面所有元素的父级参照物(和HTML层级结构没有必然的联系)

一般来说一个页面中所有元素的父级参照物都是body

document.body.offsetParent // null

想要改变父级参照物需要通过position定位来进行改变(absolute relative fixed 都可以进行改变  )

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    *{
      margin:0;
      padding:0;
    }
    #outer{
      width:180px;
      height:180px;
      margin:50px auto;
      border:10px solid #000;
      background:orange;
      padding:50px;
    }
    #inner{
      width:80px;
      height:80px;
      padding:50px;
      border:10px solid #000;
      background:green;
    }
    #center{
      width:50px;
      height:50px;
      border:10px solid #000;
      background:red;
    }
  </style>
</head>
<body>
  <div id="outer">
    <div id="inner">
      <div id="center"></div>
    </div>
  </div>

  <script>
    var outer = document.getElementById('outer');
    var inner = document.getElementById('inner');
    var center = document.getElementById('center');

    outer.style.position = "relative";//这样inner和center的参照物都是outer
    center.offsetParent//outer
    inner.offsetParent//outer
    outer.offsetParent//body
    outer.style.position = "relative";//
    inner.style.position = "relative";
    center.offsetParent//inner
    inner.offsetParent//outer
    outer.offsetParent//body
  </script>
</body>
</html>

3、offsetTop/offsetLeft :当前元素(外边框)距离其父级参照物(内边框)的偏移距离

具体如下图所示:

js获取元素的偏移量offset简单方法(必看)

下面是一个offset方法:等同于jQuery中的offset方法,实现获取页面中任意一个元素,距离body的偏移(包含左偏移和上偏移),不管当前元素的父级参照物是谁。获取的一个结果是一个对象{left:距离BODY的左偏移,top:距离BODY的上偏移}

在标准的IE8浏览器中,我们使用offsetLeft/offsetTop其实是把父级参照物的边框已经算在内了。所以我们不需要自己在单独加边框了

代码如下:

function offset(curEle){
      var totalLeft = null,totalTop = null,par = curEle.offsetParent;
      //首先加自己本身的左偏移和上偏移
      totalLeft+=curEle.offsetLeft;
      totalTop+=curEle.offsetTop
      //只要没有找到body,我们就把父级参照物的边框和偏移也进行累加
      while(par){
        if(navigator.userAgent.indexOf("MSIE 8.0")===-1){
          //累加父级参照物的边框
          totalLeft+=par.clientLeft;
          totalTop+=par.clientTop
        }
        
        //累加父级参照物本身的偏移
        totalLeft+=par.offsetLeft;
        totalTop+=par.offsetTop
        par = par.offsetParent;
      }

      return{
        left:totalLeft,
        top:totalTop
      }
    }
    console.log(offset(center).left)

以上这篇js获取元素的偏移量offset简单方法(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE下写xml文件的两种方式(fso/saveAs)
Aug 05 Javascript
js 异步操作回调函数如何控制执行顺序
Dec 24 Javascript
jquery插件orbit.js实现图片折叠轮换特效
Apr 14 Javascript
javascript Slip.js实现整屏滑动的手机网页
Nov 25 Javascript
JavaScript中的继承之类继承
May 01 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
Oct 14 Javascript
js实现点击每个li节点,都弹出其文本值及修改
Dec 15 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
vue cli安装使用less的教程详解
Jul 12 Javascript
Vue实现点击按钮复制文本内容的例子
Nov 09 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
vue-cli3自动消除console.log()的调试信息方式
Oct 21 Javascript
使用angular帮你实现拖拽的示例
Jul 05 #Javascript
使用JavaScript根据图片获取条形码的方法
Jul 04 #Javascript
jquery拖动改变div大小
Jul 04 #jQuery
JavaScript无操作后屏保功能的实现方法
Jul 04 #Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 #Javascript
5分钟打造简易高效的webpack常用配置
Jul 04 #Javascript
AngularJS实现表格的增删改查(仅限前端)
Jul 04 #Javascript
You might like
thinkPHP引入类的方法详解
2016/12/08 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
react-router实现按需加载
2017/05/09 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
vuex的使用步骤
2021/01/06 Vue.js
在Django的视图中使用form对象的方法
2015/07/18 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python API自动化框架总结
2019/11/12 Python
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
前台文员的岗位职责
2013/11/14 职场文书
应届生自我鉴定
2013/12/11 职场文书
大学生党员自我批评
2014/02/14 职场文书
给公司的建议书范文
2014/05/13 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
Android studio 简单计算器的编写
2022/05/20 Java/Android
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript