简单谈谈offsetleft、offsetTop和offsetParent


Posted in Javascript onDecember 04, 2020

ele.offsetParent返回的是ele元素最近的并且是定位过(relative,absolute)的父元素,如果没有父元素或者是父元素中没有一个是定位过的,返回值就是body元素

ele.offsetLeft和ele.offsetTop取值问题,分多种情况:

  • 如果ele是body的直接子元素,返回值则是ele距离body左侧或顶部的距离
  • 如果ele不是body的直接子元素,在父元素进行定位(relative,absolute)的情况下,各浏览器返回值都是ele距离父元素左侧或者是
    顶部的距离(唯一的区别就是chrome没有把边框计算进去,IE,firefox都计算进去了)
  • 如果ele不是body的直接子元素,父元素也没有进行定位的情况下,各浏览器返回的直接是ele元素距body的距离

从上面可以看出offsetLeft、offsetTop返回的值就是ele到offsetParent的距离,这个offsetParent是什么元素要看ele的父元素有没有进行定位(relative、absolute)

应用:

在要获取元素距离网页左侧距离的时候就要考虑offsetParent的定位问题,不能简单的用ele.offsetLeft/Top获取,必须通过循环累加的方式才能获得正确值(chrome的结果和IE、Firefox不一样,相差1px,原因是chrome没有把边框计算进去),下面是代码

(Tips:代码中的this.left、this.top可以用arguments.callee代替,但根据ECMAScript 5规范不建议使用,strict model下已经被禁用,因为arguments是一个比较庞大的对象,非常耗资源)

var getOffset = {
 left:function(obj){
  return obj.offsetLeft + (obj.offsetParent ? this.left(obj.offsetParent) : 0);
 },
 top:function(){
  return obj.offsetTop + (obj.offsetParent ? this.top(obj.offsetParent) : 0);
 }
}

到此这篇关于offsetleft、offsetTop和offsetParent的文章就介绍到这了,更多相关offsetleft、offsetTop和offsetParent内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
mouse_on_title.js
Aug 25 Javascript
js 格式化时间日期函数小结
Mar 20 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
May 23 Javascript
js操作iframe兼容各种主流浏览器示例代码
Jul 22 Javascript
jQuery使用drag效果实现自由拖拽div
Jun 11 Javascript
jQuery超简单选项卡完整实例
Sep 26 Javascript
JavaScript中setter和getter方法介绍
Jul 11 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
Nov 24 Javascript
深入理解Puppeteer的入门教程和实践
Mar 05 Javascript
用原生 JS 实现 innerHTML 功能实例详解
Apr 03 Javascript
微信小程序实现订单倒计时
Nov 01 Javascript
JS实现无限轮播无倒退效果
Sep 21 Javascript
HTML元素拖拽功能实现的完整实例
Dec 04 #Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
Dec 04 #Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 #Vue.js
addEventListener()和removeEventListener()追加事件和删除追加事件
Dec 04 #Javascript
vue使用echarts图表自适应的几种解决方案
Dec 04 #Vue.js
原生JS实现拖拽效果
Dec 04 #Javascript
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 #Vue.js
You might like
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
跟老齐学Python之for循环语句
2014/10/02 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
python通过TimedRotatingFileHandler按时间切割日志
2019/07/17 Python
详解用python生成随机数的几种方法
2019/08/04 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
如何将字串String转换成整数int
2015/02/21 面试题
机电一体化专业应届本科生求职信
2013/09/27 职场文书
绝对经典成功的大学生推荐信
2013/11/08 职场文书
生产部统计员岗位职责
2014/01/05 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
受伤赔偿协议书
2014/09/24 职场文书
会计出纳岗位职责
2015/03/31 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技