简单谈谈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 06 Javascript
js判读浏览器是否支持html5的canvas的代码
Nov 18 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
Dec 16 Javascript
JavaScript必知必会(三) String .的方法来自何方
Jun 08 Javascript
AngularJS  $on、$emit和$broadcast的使用
Sep 05 Javascript
获取select的value、text值的简单示例(jquery与javascript)
Dec 07 Javascript
Vue.js 60分钟快速入门教程
Mar 28 Javascript
JQuery实现定时刷新功能代码
May 09 jQuery
微信小程序 自定义消息提示框
Aug 06 Javascript
element-ui 上传图片后清空图片显示的实例
Sep 04 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 Javascript
Vue3实现简易音乐播放器组件
Aug 14 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
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
jQuery复合事件用法示例
2017/06/10 jQuery
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
Python序列操作之进阶篇
2016/12/08 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
利用python汇总统计多张Excel
2020/09/22 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
应用艺术毕业生的自我评价
2013/12/04 职场文书
党员自我评价分享
2013/12/13 职场文书
家长会主持词开场白
2014/03/18 职场文书
听课评语大全
2014/04/30 职场文书
教师求职信
2014/06/17 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
2016年春节问候语
2015/11/11 职场文书