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 相关文章推荐
关于URL中的特殊符号使用介绍
Nov 03 Javascript
js中的replace方法使用介绍
Oct 28 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
Jan 09 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
Dec 22 Javascript
JS仿JQuery选择器功能
Mar 08 Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
Dec 16 jQuery
node.js用fs.rename强制重命名或移动文件夹的方法
Dec 27 Javascript
vue 2.0 购物车小球抛物线的示例代码
Feb 01 Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 Javascript
css配合JavaScript实现tab标签切换效果
Oct 11 Javascript
Vue的H5页面唤起支付宝支付功能
Apr 18 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
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
粗略分析Python中的内存泄漏
2015/04/23 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
自我评价的正确写法
2013/09/19 职场文书
检察官就职演讲稿
2014/01/13 职场文书
学校安全责任书
2014/04/14 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
详解SQL的窗口函数
2022/04/21 Oracle