js進階 11-8 jquery如何獲取元素相對於父元素的位置


js進階 11-8  jquery如何獲取元素相對於父元素的位置

一、總結

一句話總結:用jquery的position方法,但是使用這個方法的前提是父元素相對定位,子元素絕對定位,否則和offset()一樣。

 

1、jquery中jquery集合中的匿名函數的兩個參數是什么?

$(selector).offset(function(index,oldoffset)),很多jquery集合中的匿名函數都是index和oldvalue兩個參數

 

2、jquery中position()和offset()的區別是什么?

如果當前元素的祖輩元素全部都是默認定位(static),那么該函數返回的偏移位置與offset()函數相同。

與offset()不同的是:position()返回的是相對於被定位的祖輩元素的坐標,offset()返回的是相對於當前文檔的坐標。

 

3、position()可以像jquery中的其它位置函數(offset(),scrollTop(),scrollLeft())一樣不僅可以取值,也可以設置值么?

不可以

position()函數無法用於設置操作。只可以返回值。

 

4、如何設置子元素相對於父元素偏移?

在CSS定位布局中,如果我們對父元素設置position:relative,我們就可以使用position:absolute來設置子元素相對於父元素的定位距離

 

5、jquery中的window對象怎么表示?

$(window)

114  $(window).scrollTop(500)

 

 

二、jquery如何獲取元素相對於父元素的位置

1、相關知識

  1. offset() 方法返回或設置匹配元素相對於文檔的偏移(位置)。
    1. 該方法返回的對象包含兩個整型屬性:top 和 left,以像素計。此方法只對可見元素有效。
    2. 設置偏移坐標:$(selector).offset(value)
    3. 使用函數來設置所有匹配元素的偏移坐標:$(selector).offset(function(index,oldoffset))
      • index - 可選。接受選擇器的 index 位置
      • oldvalue - 可選。接受選擇器的當前坐標
  2. position() 方法返回匹配元素相對於父元素的位置(偏移)。

    在CSS定位布局中,如果我們對父元素設置position:relative,我們就可以使用position:absolute來設置子元素相對於父元素的定位距離

    • position()函數用於返回當前匹配元素相對於其被定位的祖輩元素的偏移,也就是相對於被定位的祖輩元素的坐標。該函數只對可見元素有效。
    • 該函數返回一個坐標對象,該對象有一個left屬性和top屬性。position()中的坐標參考系是以被定位的祖輩元素的左上角為原點(0,0),向右為正,向下為正。
    • 如果當前元素的祖輩元素全部都是默認定位(static),那么該函數返回的偏移位置與offset()函數相同
    • 如果當前jQuery對象匹配多個元素,返回坐標時,position()函數只以其中第一個匹配的元素為准。如果沒有匹配的元素,則返回undefined。
    • 與offset()不同的是:position()返回的是相對於被定位的祖輩元素的坐標,offset()返回的是相對於當前文檔的坐標
    • position()函數無法用於設置操作
  3. scrollTop():獲取或設置元素相對於垂直滾動條頂部的距離,
  4. scrollLeft():來獲取或設置元素相對於水平滾動條左部的距離。

 

 

2、代碼

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <style>
  4 </style>
  5 <head>
  6     <meta charset="UTF-8">
  7     <title>演示文檔</title>
  8     <script type="text/javascript" src="jquery-3.1.1.min.js"></script>
  9     <style>
 10         #main{
 11             margin:50px;
 12             padding: 50px;
 13             background: #ccc;
 14             width: 100px;height: 100px;
 15             position: relative;
 16         /*    overflow: auto;*/
 17         }
 18         #div1{
 19             position: absolute;
 20             width: 100px;height: 100px;
 21             background: red;
 22         }
 23     </style>
 24 </style>
 25 </head>
 26 <body>
 27     <div id="main">
 28         <div id="div1"></div>
 29         <ol>
 30             <li></li>
 31             <li></li>
 32             <li></li>
 33             <li></li>
 34             <li></li>
 35             <li></li>
 36             <li></li>
 37             <li></li>
 38             <li></li>
 39             <li></li>
 40             <li></li>
 41             <li></li>
 42             <li></li>
 43             <li></li>
 44             <li></li>
 45             <li></li>
 46             <li></li>
 47             <li></li>
 48             <li></li>
 49             <li></li>
 50             <li></li>
 51             <li></li>
 52             <li></li>
 53             <li></li>
 54             <li></li>
 55             <li></li>
 56             <li></li>
 57             <li></li>
 58             <li></li>
 59             <li></li>
 60             <li></li>
 61             <li></li>
 62             <li></li>
 63             <li></li>
 64             <li></li>
 65             <li></li>
 66             <li></li>
 67             <li></li>
 68             <li></li>
 69             <li></li>
 70             <li></li>
 71             <li></li>
 72             <li></li>
 73             <li></li>
 74             <li></li>
 75             <li></li>
 76             <li></li>
 77             <li></li>
 78             <li></li>
 79             <li></li>
 80         </ol>
 81     </div>
 82     <input id="btn1" type="button" value="獲取">
 83     <input id="btn2" type="button" value="設置">
 84     <input id="btn3" type="button" value="設置2">
 85     <script type="text/javascript">
 86         $(function(){
 87             $('#btn1').click(function(){
 88                 var top = $("#div1").offset().top;
 89                 var left = $("#div1").offset().left;
 90                 alert(top+'\n'+left)
 91 
 92                 var top2 = $("#div1").position().top;
 93                 var left2= $("#div1").position().left;
 94                  alert(top2+'\n'+left2)
 95             })
 96 
 97             $('#btn2').click(function(){
 98                 // $("#div1").offset({
 99     //                 top:200,
100     //                 left:200
101     //             });
102                 $("#div1").position({
103                     top:200,
104                     left:200
105                 });  
106 
107             })
108 
109             var count=0
110             $('#btn3').click(function(){
111                 $('#main').scrollTop(count++*100)
112                 alert($('#main').scrollTop())
113             })
114  $(window).scrollTop(500) 115         })
116     </script>
117 </body>
118 </html>

 

 

 

 

 

 

 

 

 

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM