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 解析url的search方法
Feb 09 Javascript
基于jquery中children()与find()的区别介绍
Apr 26 Javascript
解析jquery获取父窗口的元素
Jun 26 Javascript
javascript的document.referrer浏览器支持、失效情况总结
Jul 18 Javascript
node.js中的fs.fchmod方法使用说明
Dec 16 Javascript
AngularJS实现Model缓存的方式
Feb 03 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
Aug 30 Javascript
jQuery Checkbox 全选 反选的简单实例
Nov 29 Javascript
Bootstrap笔记之缩略图、警告框实例详解
Mar 09 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
Jun 12 Javascript
ztree+ajax实现文件树下载功能
May 18 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
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
PHP.vs.JAVA
2016/04/29 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
JS实现手风琴特效
2020/11/08 Javascript
Python3.2中的字符串函数学习总结
2015/04/23 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
python读取指定字节长度的文本方法
2019/08/27 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
纪律教育学习月活动总结
2014/08/27 职场文书
学校2014年度工作总结
2014/12/06 职场文书
工作试用期自我评价
2015/03/10 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
教师培训学习心得体会
2016/01/21 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
mysql优化
2021/04/06 MySQL
新手初学Java网络编程
2021/07/07 Java/Android