简单谈谈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 相关文章推荐
基于jQuery的淡入淡出可自动切换的幻灯插件
Aug 24 Javascript
鼠标移动到图片名上,显示图片的简单实例
Jul 14 Javascript
jQuery实现的漂亮表单效果代码
Aug 18 Javascript
纯javascript实现图片延时加载方法
Aug 21 Javascript
js实现商品抛物线加入购物车特效
Nov 18 Javascript
JS中取二维数组中最大值的方法汇总
Apr 17 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
ES6中箭头函数的定义与调用方式详解
Jun 02 Javascript
关于页面刷新vuex数据消失问题解决方案
Jul 03 Javascript
node使用Mongoose类库实现简单的增删改查
Nov 08 Javascript
浅谈Express.js解析Post数据类型的正确姿势
May 30 Javascript
通过原生vue添加滚动加载更多功能
Nov 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 Memcache 中实现消息队列
2009/11/24 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
php获取excel文件数据
2017/04/21 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
js 数组操作代码集锦
2009/04/28 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
jQuery序列化后的表单值转换成Json
2017/06/16 jQuery
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
蟋蟀的住宅教学反思
2014/04/26 职场文书
商业融资计划书
2014/04/29 职场文书
军训口号
2014/06/13 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers
vue自定义右键菜单之全局实现
2022/04/09 Vue.js