js获取元素的偏移量offset简单方法(必看)

发布时间 - 2026-01-11 02:11:00    点击率:

前言:以前一直是看别人写的,然后学习点东西,现在也把自己的学习记录下来,给大家一个学习的机会,欢迎大家多多评论和推荐哈,共同进步。竟然还有六个人关注我了 ,哈哈 开心。我会继续写下去的。。

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 :当前元素(外边框)距离其父级参照物(内边框)的偏移距离

具体如下图所示:

下面是一个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简单方法(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# js  # 获取元素偏移量  # js中offset  # client  # scroll 三大元素知识点总结  # MySQL查询中LIMIT的大offset导致性能低下浅析  # JS中offset和匀速动画详解  # 详解原生js实现offset方法  # JavaScript中offsetWidth的bug及解决方法  # div的offsetLeft与style.left区别  # JavaScript中style.left与offsetLeft的使用及区别详解  # window.setInterval()方法的定义和用法及offsetLeft与style.left  # springboot中如何实现kafa指定offset消费  # 给大家  # 都是  # 是一个  # 大家多多  # 自己的  # 我会  # 都不  # 不需要  # 就把  # 希望能  # 不存在  # 我了  # 所示  # 这篇  # 自带  # 没有找到  # 必看  # 小编  # 也把  # 如下图 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 青岛网站建设如何选择本地服务器?  MySQL查询结果复制到新表的方法(更新、插入)  Android 常见的图片加载框架详细介绍  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  如何生成腾讯云建站专用兑换码?  详解jQuery停止动画——stop()方法的使用  如何在香港服务器上快速搭建免备案网站?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  JS实现鼠标移上去显示图片或微信二维码  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  中山网站制作网页,中山新生登记系统登记流程?  微信小程序 input输入框控件详解及实例(多种示例)  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  如何在宝塔面板创建新站点?  Android okhttputils现在进度显示实例代码  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  图册素材网站设计制作软件,图册的导出方式有几种?  Linux系统命令中screen命令详解  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  JavaScript如何实现类型判断_typeof和instanceof有什么区别  教你用AI将一段旋律扩展成一首完整的曲子  如何快速生成可下载的建站源码工具?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Android滚轮选择时间控件使用详解  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  利用JavaScript实现拖拽改变元素大小  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  详解jQuery中的事件  使用spring连接及操作mongodb3.0实例  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  轻松掌握MySQL函数中的last_insert_id()  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel如何生成URL和重定向?(路由助手函数)  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  历史网站制作软件,华为如何找回被删除的网站?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  如何用AI帮你把自己的生活经历写成一个有趣的故事?  打造顶配客厅影院,这份100寸电视推荐名单请查收  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?