获取元素位置信息和所占空间大小(via:js&jquery)
工作中有一个很常见的需求,hover或者click某元素后,在该元素旁边出现弹框,主要就是获取该元素的位置坐标以及元素所占区块的大小。最近工作中就遇到了,发现js和jquery的实现方法有很大的区别,这里总结一下,备忘。
- 获取元素的相对位置信息
- 原生js方法
var x = obj.offsetLeft,
y = obj.offsetTop;
- jquery方法
var _offset = $obj.offset(),
x = _offset.left,
y = _offset.top;
这两个方法看起来相似,其实有很大的不同.
- 原生js获取位置的参考信息是:父辈元素中的定位元素,即非static(默认值)的元素。而juqery方法始终返回相对于文档的偏移。
- 当父元素有滚动条的时候,两者的情况也是不同的。js会把滚动的距离也算在相应的偏移量中,而jquery的值不受滚动条的影响。
综合以上两点不同可以看出:当父元素不会出现滚动条且父辈元素的定位属性都统一(即参考点要相同)的时候,可以用原生方法获取位置信息,弹框用相对定位(相对于上面提到的参考点).jquery则相对简单很多,因为他的计算始终相对于文档,所以弹框用fixed定位即可。
- 原生js方法
- 获取元素所占区块的大小
- 原生js方法
// 方法1
var _width = obj.style.width,
_height = obj.style.height;
// 方法2
var _width = obj.offsetWidth,
_height = obj.offsetHeight;
其中方法一基本可以忽略,因为他只能获取到内敛样式。当然可以代替他的方法也有,情参考通过原生js获取元素的样式
- jquery方法
// 获取高度的方法类似
var _width1 = $obj.width(),
_width2 = $obj.innerWidth(),
_width3 = $obj.outerWidth(),
_width4 = $obj.outerWidth(true);
有多重方法可以获取元素的大小,下面分别介绍异同。由盒模型可以知道,元素所占空间大小 = width + padding + border + margin; 所以可以得到以下对应关系:
_width1 = width;
_width2 = width + padding;
_width3 = width + padding + border;
_width4 = width + padding + border + marign;
原生js方法2获取的宽度_width相当于jquery的方放获取到的_width3;
- 原生js方法
根据以上获取到的信息就可以定位弹框的位置了:
$popup.css({ // 此处把弹框定位在元素的右侧居中位置
left: x + _width,
top: y + _height/2
})
获取元素位置信息和所占空间大小(via:js&jquery)的更多相关文章
- 获取元素位置信息:getBoundingClientRect
一个神奇的方法. 一.历史 偷个懒,上个传送门:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html 二.介绍 DOM元素方法,返回一 ...
- js获取元素位置和style的兼容性写法
今天说一下js获取元素位置和style的方法.当然不只是element.style那么简单.. 主角:getBoundingClientRect,getClientRects,getComputedS ...
- Selenium2学习-031-WebUI自动化实战实例-029-JavaScript 在 Selenium 自动化中的应用实例之四(获取元素位置和大小)
通过 JS 或 JQuery 获取到元素后,通过 offsetLeft.offsetTop.offsetWidth.offsetHeight 即可获得元素的位置和大小,非常的简单,直接上源码了,敬请参 ...
- 【全面总结】js获取元素位置大小
[js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...
- 关于微信小程序获取当前位置信息
小程序开发---获取当前位置信息 一.获取用户地理位置信息 1.配置app.json文件 { "pages": ["pages/index/index"], & ...
- C# 64位系统中类型所占空间大小
Boolean 8Byte DateTime 8Byte Decimal 16Byte String 引用地址空间8Bypte Int 4Bypte 类所占空间大小 (byte):各个filed ...
- oracle 查看表行数所占空间大小
最新数据库空间有感觉捉急了,上次,删了些数据空了800+G,撑了一个多月,现在还有400+G,每天10G的增量,多少空间也感觉不够用啊. 不能加硬盘,就只有删数据了.. 删数据,人懒,直接找表行最多, ...
- 在Android Studio中使用BaiduMap SDK实时获取当地位置信息
配置BaiduMap 环境 1.在百度API中新建自己的一个APP包名和APP名需要注意和自己Android Studio 中的包名和APP名保持一致: 2.百度地图中还需要填写一个SHA1 数字签名 ...
- Android初级教程获取手机位置信息GPS与动态获取最佳方式
简单介绍一下gps定位的操作. 主要是靠locationmanger这个api完成的一些操作:通过获取这个实例,然后调用它的requestLocationUpdates方法进行注册.传入的参数分别有以 ...
随机推荐
- seajs引入jquery
seajs 2.2.1在config文件中preload一次jquery,就可以在整个项目中使用jquery.如下: seajs.on('exec', function(module) { if (m ...
- Leetcode 583.两个字符串的删除操作
两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例 1: 输入: "se ...
- 聊聊、Spring 数据源
平时开发中我们每天都会跟数据库打交道,页面上显示的数字,图片,语音,等等都存在某个地方,而我们就是要从那个地方拿到我们想要的.现在存储数据的方式越来越多,多种多样,但用的最多的还是关系数据库.Spri ...
- DNS 劫持、HTTP 劫持与 DNS 污染
本文为本人的学习笔记,不保证正确. DNS 劫持 指DNS服务器被控制,查询DNS时,服务器直接返回给你它想让你看的信息.这种问题常为 ISP 所为. 由于一般的的电脑的 DNS 服务器 的配置都为自 ...
- MQ、JMS以及ActiveMQ的了解和认识
新加入的公司中,架构用到了activeMq,对于以前只了解nginx.tomcat的我有点懵逼,所以在网上找点资料看看,了解下什么是MQ,activemq.具体作用是什么 MQ MQ简介: MQ全称为 ...
- 软工实践第八次作业——UML设计
本次作业博客 团队组成 临时组长:何裕捷 组员:蔡子阳,陈德斌,胡青元,李麒,高裕翔,王焕仁,黄培鑫 UML 用例图 描述的部分: 1 这里是用户个人管理系统的用例图 面临的问题: 1 面临用户登录注 ...
- ALPHA(五)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- POJ 3254:Corn Fields(状态压缩DP)
题目大意:一个矩形的草地,分为多个格子,有的格子可以有奶牛(标为1),有的格子不可以放置奶牛(标为0),计算摆放奶牛的方案数. 分析: f[i,j]表示第i行状态为j的方案总数. 状态转移方程f[i, ...
- 【bzoj3295】[Cqoi2011]动态逆序对 线段树套SBT
题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序 ...
- 【bzoj2431】[HAOI2009]逆序对数列 dp
题目描述 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这 ...