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与FireFox的剪切板操作代码
Sep 28 Javascript
基于JQuery 的消息提示框效果代码
Jul 31 Javascript
JQuery自动触发事件的方法
Jun 13 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
Jul 27 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
Nov 15 Javascript
基于jQuery插件实现点击小图显示大图效果
May 11 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
Oct 27 Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
详解Vue中一种简易路由传参办法
Sep 15 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
微信小游戏中three.js离屏画布的示例代码
Oct 12 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
关于手调机和数调机的选择
2021/03/02 无线电
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
js中的push和join方法使用介绍
2013/10/08 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
python读取与处理netcdf数据方式
2020/02/14 Python
Python configparser模块常用方法解析
2020/05/22 Python
详解Python 最短匹配模式
2020/07/29 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
表扬信格式
2014/01/12 职场文书
八年级数学教学反思
2014/01/31 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
三年级学生评语
2014/04/23 职场文书
主题教育活动总结
2014/05/05 职场文书
导师就业推荐信范文
2014/05/22 职场文书
2014年化验员工作总结
2014/11/18 职场文书
七年级作文之冬景
2019/11/07 职场文书
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL