简单谈谈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 相关文章推荐
javascript编程起步(第二课)
Feb 27 Javascript
javascript 获取select下拉列表值的代码
Sep 07 Javascript
javascript 日期常用的方法
Nov 11 Javascript
javascript打印大全(打印页面设置/打印预览代码)
Mar 29 Javascript
JS去除数组重复值的五种不同方法
Sep 06 Javascript
jQuery中:reset选择器用法实例
Jan 04 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
Jan 31 jQuery
JS同步、异步、延迟加载的方法
May 05 Javascript
微信小程序云开发之新手环境配置
May 16 Javascript
JavaScript canvas绘制圆弧与圆形
Feb 18 Javascript
JavaScript实现动态生成表格
Aug 02 Javascript
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
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
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
php自定义hash函数实例
2015/05/05 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
python检查指定文件是否存在的方法
2015/07/06 Python
python更改已存在excel文件的方法
2018/05/03 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
工程造价与管理专业应届生求职信
2013/11/23 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
社区母亲节活动记录
2014/03/06 职场文书
自我鉴定标准格式
2014/03/19 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
结婚典礼致辞
2015/07/28 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python