jQuery position() 函數(shù)詳解以及jQuery中position函數(shù)的應(yīng)用
position()函數(shù)用于返回當(dāng)前匹配元素相對(duì)于其被定位的祖輩元素的偏移,也就是相對(duì)于被定位的祖輩元素的坐標(biāo)。該函數(shù)只對(duì)可見元素有效。
所謂"被定位的元素",就是元素的CSS position屬性值為absolute、relative或fixed(只要不是默認(rèn)的static即可)。
該函數(shù)返回一個(gè)坐標(biāo)對(duì)象,該對(duì)象有一個(gè)left屬性和top屬性。屬性值均為數(shù)字,它們都以像素(px)為單位。
與offset()不同的是:position()返回的是相對(duì)于被定位的祖輩元素的坐標(biāo),offset()返回的是相對(duì)于當(dāng)前文檔的坐標(biāo)。此外,position()函數(shù)無法用于設(shè)置操作。如果當(dāng)前元素的祖輩元素全部都是默認(rèn)定位(static),那么該函數(shù)返回的偏移位置與offset()函數(shù)相同。
該函數(shù)屬于jQuery對(duì)象(實(shí)例)。
語(yǔ)法
jQuery 1.2 新增該函數(shù)。
jQueryObject.position( )
返回值
position()函數(shù)的返回值為Object類型,返回一個(gè)相對(duì)于離它最近的"被定位的"祖輩元素的偏移坐標(biāo)對(duì)象,該對(duì)象具有l(wèi)eft和top屬性。
如果當(dāng)前jQuery對(duì)象匹配多個(gè)元素,返回坐標(biāo)時(shí),position()函數(shù)只以其中第一個(gè)匹配的元素為準(zhǔn)。如果沒有匹配的元素,則返回undefined。
position()中的坐標(biāo)參考系是以被定位的祖輩元素的左上角為原點(diǎn)(0,0),向右為正,向下為正。
示例&說明
以下面這段HTML代碼為例:
<br> <br> <p id="n1"><span id="n2">專注于編程開發(fā)技術(shù)分享</span></p>
以下jQuery示例代碼用于演示position()函數(shù)和offset()函數(shù)的用法:
var $n2 = $("#n2"); // 輸出n2的偏移坐標(biāo) var pos = $n2.position(); document.writeln( "n2的position()偏移坐標(biāo):(" + pos.left + ", " + pos.top + ")" ); // n2的position()偏移坐標(biāo):(8, 60) var coord = $n2.offset(); document.writeln( "n2的offset()的偏移坐標(biāo):(" + coord.left + ", " + coord.top + ")" ); // n2的offset()的偏移坐標(biāo):(8, 60)
從上述jQuery的運(yùn)行結(jié)果可知,position()并不是獲取相對(duì)于其父元素的偏移位置。如果n2的祖輩元素全部為默認(rèn)定位,則position()返回的偏移位置和offset()函數(shù)一致。
下面,我們將上述HTML代碼中的n1加上相對(duì)定位(relative):
<br> <br> <p id="n1" style="position: relative;" ><span id="n2">專注于編程開發(fā)技術(shù)分享</span></p>
然后,我們重新執(zhí)行上述jQuery代碼,可以看到以下結(jié)果:
var $n2 = $("#n2"); // 輸出n2的偏移坐標(biāo) var pos = $n2.position(); document.writeln( "n2的position()偏移坐標(biāo):(" + pos.left + ", " + pos.top + ")" ); // n2的position()偏移坐標(biāo):(0, 0) var coord = $n2.offset(); document.writeln( "n2的offset()的偏移坐標(biāo):(" + coord.left + ", " + coord.top + ")" ); // n2的offset()的偏移坐標(biāo):(8, 60)
此時(shí),在n2的祖輩元素中,n1是離n2最近的定位的祖輩元素(這里是relative,absolute、fixed也是如此),因此position()返回n2相對(duì)于n1的偏移位置。
.jQuery中position函數(shù)的應(yīng)用(居中,超出屏幕處理等)
jQuery提供了一個(gè)Position函數(shù),可以很方便的對(duì)Html元素進(jìn)行定位,簡(jiǎn)單的使用方法如下:
$(".daygrid").click(function(event){ clickedGrid = $(this); $(".modal").modal("show"); $(".modal").position({ of:clickedGrid, offset:" ", collision:"fit" }); });
上面是一個(gè)很常用的用法,注冊(cè)一個(gè)click時(shí)間,然后當(dāng)有點(diǎn)擊事件發(fā)生時(shí),獲取到被點(diǎn)擊的元素,然后將對(duì)話框用position方法顯示至界面中。
position函數(shù)接受一個(gè)options對(duì)象,參數(shù)有很多
of:表示要放置在那個(gè)對(duì)象上,也可以傳遞click的event對(duì)象
my與at:這兩個(gè)比較不容易理解,其實(shí)也就是參照物和被參照物,my參數(shù)表示用什么位置來做參照而at表示參照目標(biāo)的那個(gè)位置。值范圍為”left center right top bottom”的任意一個(gè)或兩個(gè)。舉個(gè)例子:my:”top left”,at:”left buttom”,這樣配置表示將要被定為的元素的左上角放置在目標(biāo)元素的左下角。
collision:表示如何處理碰撞,值范圍為:”flip fit none”三選一。flip的官方英文說明看不是很懂,實(shí)際測(cè)試的效果是,如果超出了預(yù)期范圍(如window)則會(huì)嘗試將元素放置到目標(biāo)區(qū)域的相反位置。fit是適應(yīng),也就是會(huì)將元素完整的放置在預(yù)期范圍內(nèi),而不會(huì)讓元素溢出。而none則是不做任何碰撞處理。
offset表示依靠my、at、of對(duì)齊元素后再進(jìn)行多少距離的偏移,例如設(shè)置為”100 100″表示移至目標(biāo)位置后再向下和右偏移100px
常見的使用就是彈出對(duì)話框的位置,為了讓對(duì)話框在鼠標(biāo)點(diǎn)擊的位置顯示,則可以將click傳的event對(duì)象傳遞給of參數(shù),并且為了保證對(duì)話框在窗口范圍內(nèi),可以將collision設(shè)置為fit。最后再根據(jù)實(shí)際需求來設(shè)置對(duì)齊參數(shù)my和at,并且用offset進(jìn)行偏移微調(diào)。一個(gè)將彈出對(duì)話框設(shè)置在窗口中央的例子:
$("#myDialog").position({ my: "center", at: "center", of: window, collision:"fit" });
以上內(nèi)容是小編給大家分享的jQuery position() 函數(shù)詳解以及jQuery中position函數(shù)的應(yīng)用的全部敘述,希望大家喜歡。
相關(guān)文章
jQuery實(shí)現(xiàn)form表單基于ajax無刷新提交方法詳解
這篇文章主要介紹了jQuery實(shí)現(xiàn)form表單基于ajax無刷新提交方法,結(jié)合實(shí)例形式分析了jQuery使用$.ajax()方法實(shí)現(xiàn)無刷新提交的詳細(xì)步驟與實(shí)現(xiàn)技巧,并附帶了一個(gè)較為完整的實(shí)例供大家參考,需要的朋友可以參考下2015-12-12jQuery 動(dòng)畫彈出窗體支持多種展現(xiàn)方式
今天剛寫的利用jQuery動(dòng)畫彈出窗體,支持了string、Ajax、iframe、controls四種展現(xiàn)方式,具體細(xì)節(jié)下面慢慢介紹,先看效果圖。2010-04-04jQuery實(shí)現(xiàn)的浮動(dòng)層div瀏覽器居中顯示效果
這篇文章主要介紹了jQuery實(shí)現(xiàn)的浮動(dòng)層div瀏覽器居中顯示效果,涉及jQuery及JS動(dòng)態(tài)操作頁(yè)面元素與屬性相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02有關(guān)easyui-layout中的收縮層無法顯示標(biāo)題的解決辦法
本文由腳本之家小編給大家介紹有關(guān)easyui-layout中的收縮層無法顯示標(biāo)題的原因分析及解決辦法,感興趣的朋友可以參考下2016-05-05jQuery實(shí)現(xiàn)的自動(dòng)加載頁(yè)面功能示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的自動(dòng)加載頁(yè)面功能,結(jié)合簡(jiǎn)單實(shí)例形式分析了jQuery針對(duì)頁(yè)面元素的動(dòng)態(tài)加載與屬性操作相關(guān)技巧,需要的朋友可以參考下2016-09-09jQuery實(shí)現(xiàn)購(gòu)物車的總價(jià)計(jì)算和總價(jià)傳值功能
這篇文章主要介紹了jQuery實(shí)現(xiàn)購(gòu)物車的總價(jià)計(jì)算和總價(jià)傳值功能 ,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11jQuery判斷網(wǎng)頁(yè)是否已經(jīng)滾動(dòng)到瀏覽器底部的實(shí)現(xiàn)方法
最近做項(xiàng)目遇到這樣的需求,要求基于jq判斷網(wǎng)頁(yè)是否已經(jīng)滾動(dòng)到瀏覽器底部了,下面小編給大家分享實(shí)例代碼,需要的朋友參考下吧2017-10-10jQuery實(shí)現(xiàn)的多級(jí)下拉菜單效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)的多級(jí)下拉菜單效果代碼,涉及jquery鼠標(biāo)事件及頁(yè)面元素的顯示與隱藏效果實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08