简单谈谈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 相关文章推荐
Add a Table to a Word Document
Jun 15 Javascript
javaScript(JS)替换节点实现思路介绍
Apr 17 Javascript
JS实现往下不断流动网页背景的方法
Feb 27 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
jQuery.datatables.js插件用法及api实例详解
Oct 28 Javascript
jQuery 遍历map()方法详解
Nov 04 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
Vue调试神器vue-devtools安装方法
Dec 12 Javascript
教你如何用node连接redis的示例代码
Jul 12 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
Sep 15 Javascript
layui 弹出删除确认界面的实例
Sep 06 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准确获取文件MIME类型的方法
2015/06/17 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
Python实现partial改变方法默认参数
2014/08/18 Python
Python selenium文件上传方法汇总
2020/11/19 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
django 多数据库配置教程
2018/05/30 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
django实现模型字段动态choice的操作
2020/04/01 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
计算机专业毕业生的自我评价
2013/11/18 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
社区志愿者活动总结
2014/06/26 职场文书
优秀党支部申报材料
2014/12/24 职场文书
天坛导游词
2015/02/02 职场文书
学校体育节班级口号
2015/12/25 职场文书
教师反邪教心得体会
2016/01/15 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书