简单谈谈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 相关文章推荐
js修改input的type属性问题探讨
Oct 12 Javascript
javascript预加载图片、css、js的方法示例介绍
Oct 14 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
表单提交前触发函数返回true表单才会提交
Mar 11 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
Nov 04 Javascript
深入分析Javascript事件代理
Jan 30 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
JS清除字符串中重复值的实现方法
Aug 03 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
Apr 09 Javascript
vue自定义filters过滤器
Apr 26 Javascript
JavaScript实现图片轮播特效
Oct 23 Javascript
js对象简介与基本用法示例
Mar 13 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
php中JSON的使用与转换
2015/01/14 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
Python中类型检查的详细介绍
2017/02/13 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
python随机模块random使用方法详解
2020/02/14 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
美国在线家装零售商:Build.com
2016/09/02 全球购物
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
护理学专业推荐信
2013/12/03 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
教学评估实施方案
2014/03/16 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书