简单谈谈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源码]超长文章自动分页(客户端版)
Jan 09 Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
JQuery替换DOM节点的方法
Jun 11 Javascript
require.js的用法详解
Oct 20 Javascript
原生js封装二级城市下拉列表的实现代码
Jun 16 Javascript
Bootstrap下拉菜单样式
Feb 07 Javascript
从零开始搭建一个react项目开发
Feb 09 Javascript
node.js部署之启动后台运行forever的方法
May 23 Javascript
Vue导出页面为PDF格式的实现思路
Jul 31 Javascript
发布一款npm包帮助理解npm的使用
Jan 03 Javascript
微信小程序仿抖音短视频切换效果的实例代码
Jun 24 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
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
详解React中setState回调函数
2018/06/14 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
EM算法的python实现的方法步骤
2018/01/02 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
numpy数组广播的机制
2019/07/12 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
python3.7添加dlib模块的方法
2020/07/01 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
小学老师对学生的评语
2014/12/29 职场文书
材料员岗位职责
2015/02/10 职场文书
小学英语教学随笔
2015/08/14 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书