jQuery position() 函数详解以及jQuery中position函数的应用


Posted in Javascript onDecember 14, 2015

position()函数用于返回当前匹配元素相对于其被定位的祖辈元素的偏移,也就是相对于被定位的祖辈元素的坐标。该函数只对可见元素有效。

所谓"被定位的元素",就是元素的CSS position属性值为absolute、relative或fixed(只要不是默认的static即可)。

该函数返回一个坐标对象,该对象有一个left属性和top属性。属性值均为数字,它们都以像素(px)为单位。

与offset()不同的是:position()返回的是相对于被定位的祖辈元素的坐标,offset()返回的是相对于当前文档的坐标。此外,position()函数无法用于设置操作。如果当前元素的祖辈元素全部都是默认定位(static),那么该函数返回的偏移位置与offset()函数相同。

该函数属于jQuery对象(实例)。

语法

jQuery 1.2 新增该函数。

jQueryObject.position( )

返回值

position()函数的返回值为Object类型,返回一个相对于离它最近的"被定位的"祖辈元素的偏移坐标对象,该对象具有left和top属性。

如果当前jQuery对象匹配多个元素,返回坐标时,position()函数只以其中第一个匹配的元素为准。如果没有匹配的元素,则返回undefined。

position()中的坐标参考系是以被定位的祖辈元素的左上角为原点(0,0),向右为正,向下为正。

示例&说明

以下面这段HTML代码为例:

<br>
<br>
<p id="n1"><span id="n2">专注于编程开发技术分享</span></p>

以下jQuery示例代码用于演示position()函数和offset()函数的用法:

var $n2 = $("#n2");
// 输出n2的偏移坐标
var pos = $n2.position();
document.writeln( "n2的position()偏移坐标:(" + pos.left + ", " + pos.top + ")" ); // n2的position()偏移坐标:(8, 60)
var coord = $n2.offset();
document.writeln( "n2的offset()的偏移坐标:(" + coord.left + ", " + coord.top + ")" ); // n2的offset()的偏移坐标:(8, 60)

从上述jQuery的运行结果可知,position()并不是获取相对于其父元素的偏移位置。如果n2的祖辈元素全部为默认定位,则position()返回的偏移位置和offset()函数一致。

下面,我们将上述HTML代码中的n1加上相对定位(relative):

<br>
<br>
<p id="n1" style="position: relative;" ><span id="n2">专注于编程开发技术分享</span></p>

然后,我们重新执行上述jQuery代码,可以看到以下结果:

var $n2 = $("#n2");
// 输出n2的偏移坐标
var pos = $n2.position();
document.writeln( "n2的position()偏移坐标:(" + pos.left + ", " + pos.top + ")" ); // n2的position()偏移坐标:(0, 0)
var coord = $n2.offset();
document.writeln( "n2的offset()的偏移坐标:(" + coord.left + ", " + coord.top + ")" ); // n2的offset()的偏移坐标:(8, 60)

此时,在n2的祖辈元素中,n1是离n2最近的定位的祖辈元素(这里是relative,absolute、fixed也是如此),因此position()返回n2相对于n1的偏移位置。

.jQuery中position函数的应用(居中,超出屏幕处理等)

jQuery提供了一个Position函数,可以很方便的对Html元素进行定位,简单的使用方法如下:

$(".daygrid").click(function(event){
  clickedGrid = $(this);
  $(".modal").modal("show");
  $(".modal").position({
    of:clickedGrid,
    offset:" ",
    collision:"fit"
  });
});

上面是一个很常用的用法,注册一个click时间,然后当有点击事件发生时,获取到被点击的元素,然后将对话框用position方法显示至界面中。

position函数接受一个options对象,参数有很多

of:表示要放置在那个对象上,也可以传递click的event对象

my与at:这两个比较不容易理解,其实也就是参照物和被参照物,my参数表示用什么位置来做参照而at表示参照目标的那个位置。值范围为”left center right top bottom”的任意一个或两个。举个例子:my:”top left”,at:”left buttom”,这样配置表示将要被定为的元素的左上角放置在目标元素的左下角。

collision:表示如何处理碰撞,值范围为:”flip fit none”三选一。flip的官方英文说明看不是很懂,实际测试的效果是,如果超出了预期范围(如window)则会尝试将元素放置到目标区域的相反位置。fit是适应,也就是会将元素完整的放置在预期范围内,而不会让元素溢出。而none则是不做任何碰撞处理。

offset表示依靠my、at、of对齐元素后再进行多少距离的偏移,例如设置为”100 100″表示移至目标位置后再向下和右偏移100px

常见的使用就是弹出对话框的位置,为了让对话框在鼠标点击的位置显示,则可以将click传的event对象传递给of参数,并且为了保证对话框在窗口范围内,可以将collision设置为fit。最后再根据实际需求来设置对齐参数my和at,并且用offset进行偏移微调。一个将弹出对话框设置在窗口中央的例子:

$("#myDialog").position({
  my: "center",
  at: "center",
  of: window,
  collision:"fit"
});

以上内容是小编给大家分享的jQuery position() 函数详解以及jQuery中position函数的应用的全部叙述,希望大家喜欢。

Javascript 相关文章推荐
jQuery获取(选中)单选,复选框,下拉框中的值
Feb 21 Javascript
js动态切换图片的方法
Jan 20 Javascript
AngularJS使用angular-formly进行表单验证
Dec 27 Javascript
Vue.js中数组变动的检测详解
Oct 12 Javascript
vue.js实现含搜索的多种复选框(附源码)
Mar 23 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
JavaScrip数组删除特定元素的几种方法总结
Sep 06 Javascript
详解require.js配置路径的用法和css的引入
Sep 06 Javascript
Node.js Buffer用法解读
May 18 Javascript
关于Vue源码vm.$watch()内部原理详解
Apr 26 Javascript
vue-router 前端路由之路由传值的方式详解
Apr 30 Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 Javascript
Position属性之relative用法
Dec 14 #Javascript
CSS中position属性之fixed实现div居中
Dec 14 #Javascript
通过设置CSS中的position属性来固定层的位置
Dec 14 #Javascript
js实现拖拽效果(构造函数)
Dec 14 #Javascript
jQuery滚动加载图片实现原理
Dec 14 #Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 #Javascript
jquery实现倒计时效果
Dec 14 #Javascript
You might like
文章推荐系统(二)
2006/10/09 PHP
PHP脚本数据库功能详解(中)
2006/10/09 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
详解flask表单提交的两种方式
2018/07/21 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
学习型党组织心得体会
2014/09/12 职场文书
产品质量保证书范本
2015/02/27 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
党员进社区活动总结
2015/05/07 职场文书