简单谈谈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中判断文本框是否为空的两种方法
Jul 31 Javascript
js 有框架页面跳转(target)三种情况下的应用
Apr 09 Javascript
jquery实现select选中行、列合计示例
Apr 25 Javascript
AngularJS语法详解
Jan 23 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
vue注册组件的几种方式总结
Mar 08 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
Sep 14 Javascript
实例讲解JS中pop使用方法
Jan 27 Javascript
详解Vue前端生产环境发布配置实战篇
May 07 Javascript
webpack 代码分离优化快速指北
May 18 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
Feb 24 Javascript
vue实现全屏滚动效果(非fullpage.js)
Mar 07 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桌面中心(二) 数据库写入
2007/03/11 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
Python Trie树实现字典排序
2014/03/28 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
Python常见工厂函数用法示例
2018/03/21 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
python3实现磁盘空间监控
2018/06/21 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
详解Python中的路径问题
2020/09/02 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
大学生个人自我鉴定
2013/12/03 职场文书
公司业务主管岗位职责
2013/12/07 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
五年级学生评语大全
2014/12/26 职场文书
自我检讨书范文
2015/01/28 职场文书
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js