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 相关文章推荐
Extjs根据条件设置表格某行背景色示例
Jul 23 Javascript
论JavaScript模块化编程
Mar 07 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
jquery根据一个值来选中select下的option实例代码
Aug 29 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
JavaScript制作简单的框选图表
May 15 Javascript
浅析前端路由简介以及vue-router实现原理
Jun 01 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
Aug 31 Javascript
微信小程序 生成携带参数的二维码
Oct 23 Javascript
vue在路由中验证token是否存在的简单实现
Nov 11 Javascript
vue实现简单数据双向绑定
Apr 28 Vue.js
使用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
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
js select option对象小结
2013/12/20 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
python爬虫容易学吗
2020/06/02 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
英语硕士生求职简历的自我评价
2013/10/15 职场文书
美容院店长岗位职责
2014/04/08 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
关于 Python json中load和loads区别
2021/11/07 Python
关于MySQL中explain工具的使用
2023/05/08 MySQL