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 相关文章推荐
jQuery 使用手册(一)
Sep 23 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
Jun 29 Javascript
GreyBox技术总结(转)
Nov 23 Javascript
浅析hasOwnProperty方法的应用
Nov 20 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 Javascript
Javascript堆排序算法详解
Dec 03 Javascript
Javascript中的apply()方法浅析
Mar 15 Javascript
jQuery弹出层插件popShow(改进版)用法示例
Jan 23 Javascript
AngularJs分页插件使用详解
Jun 30 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
Sep 26 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
Mar 16 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
smtp邮件发送一例
2006/10/09 PHP
与数据库连接
2006/10/09 PHP
Smarty模板快速入门
2007/01/04 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
php源码的安装方法和实例
2019/09/26 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
js对象基础实例分析
2015/01/13 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
python 实现Harris角点检测算法
2020/12/11 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
路政管理专业推荐信
2013/11/11 职场文书
工作说明书范文
2014/05/07 职场文书
医师定期考核实施方案
2014/05/07 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
社区党务工作总结2015
2015/05/19 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP