简单谈谈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 相关文章推荐
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
Aug 13 Javascript
JS面向对象编程 for Cookie
Sep 19 Javascript
javascript操作excel生成报表示例
May 08 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
jQuery平滑旋转幻灯片特效代码分享
Sep 07 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
Oct 29 Javascript
聊一聊JavaScript作用域和作用域链
May 03 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
Jun 22 Javascript
简单的Vue异步组件实例Demo
Dec 27 Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 Javascript
jquery传参及获取方式(两种方式)
Feb 13 jQuery
使用vant的地域控件追加全部选项
Nov 03 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获取数组最后一个值的2种方法
2015/01/21 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
php中删除、清空session的方式总结
2015/10/09 PHP
PHP微信红包API接口
2015/12/05 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
详解python的super()的作用和原理
2020/10/29 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
开工庆典邀请函范文
2014/01/16 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
高中生学习计划书
2014/09/15 职场文书
兵马俑导游词
2015/02/02 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书