ฉันจะค้นหาตำแหน่งสัมบูรณ์ขององค์ประกอบโดยใช้ jQuery ได้อย่างไร


398

มีวิธีการหาตำแหน่งที่แน่นอนขององค์ประกอบคือเมื่อเทียบกับจุดเริ่มต้นของหน้าต่างโดยใช้ jQuery?

คำตอบ:


650

.offset() จะส่งคืนตำแหน่งออฟเซ็ตขององค์ประกอบเป็นวัตถุอย่างง่ายเช่น:

var position = $(element).offset(); // position = { left: 42, top: 567 }

คุณสามารถใช้ค่าส่งคืนนี้เพื่อจัดวางองค์ประกอบอื่น ๆ ที่จุดเดียวกัน:

$(anotherElement).css(position)

90
ฉันมักจะลืมสิ่งนี้และค้นหาโพสต์ของคุณอีกครั้งเมื่อฉัน google: p
Aren

16
ดูเหมือนจะไม่กลับมาอยู่ในตำแหน่งที่แน่นอนเสมอไปเนื่องจากความแตกต่างของเส้นขอบ ฯลฯ
Tom

8
ฉันใช้โครเมียมและoffset()ไม่คืนพิกัดที่เหมาะสม มันส่งคืนประมาณ 300 พิกเซลมากกว่าพิกัดด้านบนสุดขององค์ประกอบในเอกสารแทน ทำไม??
SoLoGHoST

1
chrome, FF และ IE ให้ผลลัพธ์ที่แตกต่าง :(
Rizwan Mumtaz

3
@Aren ฉันมักจะลืมสิ่งนี้และพบว่าความคิดเห็นของคุณน่าขบขันทุกครั้ง :)
อเล็กซ์

197

โปรดทราบว่า$(element).offset()จะบอกคุณตำแหน่งขององค์ประกอบที่สัมพันธ์กับเอกสาร วิธีนี้ใช้งานได้ดีในสถานการณ์ส่วนใหญ่ แต่ในกรณีที่position:fixedคุณสามารถรับผลลัพธ์ที่ไม่คาดคิด

หากเอกสารของคุณยาวกว่าวิวพอร์ตและคุณเลื่อนแนวตั้งไปทางด้านล่างของเอกสารค่าposition:fixedองค์ประกอบของคุณจะมากกว่าค่าที่คาดไว้ตามจำนวนเงินที่คุณเลื่อนoffset()

หากคุณกำลังมองหาค่าเทียบกับวิวพอร์ต (หน้าต่าง) มากกว่าเอกสารบนตำแหน่ง: คงองค์ประกอบคุณสามารถลบเอกสารscrollTop()ค่าจากองค์ประกอบคงที่ของoffset().topความคุ้มค่า ตัวอย่าง:$("#el").offset().top - $(document).scrollTop()

ถ้าposition:fixedองค์ประกอบหลักของออฟเซ็ตเป็นเอกสารคุณต้องการอ่านparseInt($.css('top'))แทน


8
ฉันกำลังมองหาสิ่งนี้! สำหรับ noob อย่างฉัน: ค่าที่จะลบคือ$(document).scrollTop()
ดร. Gianluigi Zane Zanettini

3
! น่ากลัว นี่ควรเป็นคำตอบที่ดีที่สุด!
Shivanshu Goyal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.