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 相关文章推荐
javascript笔试题目附答案@20081025_jb51.net
Oct 26 Javascript
用js解决数字不能换行问题
Aug 10 Javascript
chrome不支持form.submit的解决方案
Apr 28 Javascript
JavaScript中日期函数的相关操作知识
Aug 03 Javascript
利用js编写响应式侧边栏
Sep 17 Javascript
js基于myFocus实现轮播图效果
Feb 14 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
May 08 Javascript
js实现简单选项卡功能
Mar 23 Javascript
JavaScript中的相等操作符使用详解
Dec 21 Javascript
Openlayers实现点闪烁扩散效果
Sep 24 Javascript
vue常用高阶函数及综合实例
Feb 25 Vue.js
vue 数据双向绑定的实现方法
Mar 04 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
php设计模式 Strategy(策略模式)
2011/06/26 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
php实现图片压缩处理
2020/09/09 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python restful框架接口开发实现
2020/04/13 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
new修饰符是起什么作用
2015/06/28 面试题
最新党员的自我评价分享
2013/11/04 职场文书
大学毕业感言
2014/01/10 职场文书
简短大学毕业感言
2014/01/18 职场文书
英语简历自我评价
2014/01/26 职场文书
企业承诺书格式
2014/05/21 职场文书
2014最新离职证明范本
2014/09/12 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
检讨书之工作不认真
2019/08/14 职场文书