jQuery: Perbedaan antara posisi () dan offset ()


178

Apa perbedaan antara position()dan offset()? Saya mencoba melakukan hal berikut dalam acara klik:

console.info($(this).position(), $(this).offset());

Dan mereka tampaknya mengembalikan persis sama ... (Elemen yang diklik adalah dalam sel tabel dalam tabel)

Jawaban:


215

Apakah mereka sama tergantung pada konteksnya.

  • positionmengembalikan {left: x, top: y}objek relatif ke induk offset

  • offsetmengembalikan {left: x, top: y}objek relatif ke dokumen .

Jelas, jika dokumen tersebut adalah induk offset, yang sering terjadi, ini akan identik. The orangtua mengimbangi adalah "unsur yang mengandung diposisikan terdekat."

Misalnya, dengan dokumen ini:

 <div style="position: absolute; top: 200; left: 200;">
     <div id="sub"></div>
 </div>

Maka itu $('#sub').offset() akan terjadi {left: 200, top: 200}, tetapi itu .position()akan terjadi {left: 0, top: 0}.


2
Jadi orangtua offset adalah orangtua pertama dengan posisi disetel ke absolut? atau?
— Svish

1
@Vish: whoa, apakah saya benar-benar kehilangan indentasi kode? terima kasih untuk edit. ya, orangtua offset adalah orangtua yang diposisikan terdekat . yaitu elemen dengan posisi disetel ke absolut, relatif atau tetap (tetapi tidak statis). ini bukan jQuery atau bahkan hal javascript, Anda memiliki perilaku yang sama dalam css: jika Anda memberikan subposisi absolut ke 0: 0, maka itu akan berada di sudut kiri atas dari induk offset.
— David Hedlund

1
FYI, .positiondiperbarui pada 1.12.0 => github.com/jquery/jquery/issues/1708
— retrovertigo

Tidak bertentangan dengan sudut pandang naluriah? Ini sangat sewenang-wenang! Bagi saya "titik" absolut adalah sebuah posisi. "Titik" relatif adalah offset.
— Sandburg

28

Metode .offset () memungkinkan kita untuk mengambil posisi elemen saat ini relatif terhadap dokumen . Bandingkan ini dengan .position () , yang mengambil posisi saat ini relatif terhadap induk offset . Saat memposisikan elemen baru di atas yang sudah ada untuk manipulasi global (khususnya, untuk menerapkan drag-and-drop), .offset () adalah yang lebih berguna.

Sumber: http://api.jquery.com/offset/


3
Seperti yang ditanyakan di atas, apa yang dianggap sebagai offset induk? Tampaknya posisi panggilan () pada div pertama di dalam div lain tidak selalu mengembalikan 0,0 - bahkan ketika tidak ada gaya atau posisi lainnya yang terjadi.
— Kokodoko

2
jquery.offsetParent (): api.jquery.com/offsetparent "Dapatkan elemen leluhur terdekat yang diposisikan."
— Curtis Yallop

-6

Kedua fungsi mengembalikan objek polos dengan dua properti: lebar & tinggi.

offset () mengacu pada posisi relatif terhadap dokumen.

position () mengacu pada posisi relatif terhadap elemen induknya

TETAPI ketika posisi css objek "absolut" kedua fungsi akan mengembalikan lebar = 0 & tinggi = 0


6
Koreksi: offset dan posisi mengembalikan objek dengan properti kiri dan atas, bukan lebar dan tinggi.
— Jorge Olivares
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.