ความแตกต่างระหว่างposition()
และoffset()
คืออะไร? ฉันพยายามทำสิ่งต่อไปนี้ในเหตุการณ์คลิก:
console.info($(this).position(), $(this).offset());
และดูเหมือนว่าพวกเขาจะกลับมาเหมือนเดิม ... (องค์ประกอบที่ถูกคลิกอยู่ภายในเซลล์ตารางในตาราง)
ความแตกต่างระหว่างposition()
และoffset()
คืออะไร? ฉันพยายามทำสิ่งต่อไปนี้ในเหตุการณ์คลิก:
console.info($(this).position(), $(this).offset());
และดูเหมือนว่าพวกเขาจะกลับมาเหมือนเดิม ... (องค์ประกอบที่ถูกคลิกอยู่ภายในเซลล์ตารางในตาราง)
คำตอบ:
ไม่ว่าพวกเขาจะเหมือนกันหรือไม่ขึ้นอยู่กับบริบท
position
ส่งคืน{left: x, top: y}
วัตถุที่สัมพันธ์กับผู้ปกครองชดเชย
offset
ส่งกลับ{left: x, top: y}
วัตถุเทียบกับเอกสาร
เห็นได้ชัดว่าหากเอกสารเป็นออฟเซ็ตพาเรนต์ซึ่งมักจะเป็นกรณีเหล่านี้จะเหมือนกัน ปกครองชดเชยคือ "ตำแหน่งที่ใกล้เคียงที่สุดที่มีองค์ประกอบ."
ตัวอย่างเช่นกับเอกสารนี้:
<div style="position: absolute; top: 200; left: 200;">
<div id="sub"></div>
</div>
จากนั้น$('#sub').offset()
จะมี{left: 200, top: 200}
แต่จะ.position()
{left: 0, top: 0}
sub
กำหนดตำแหน่งที่แน่นอนเป็น 0: 0 แล้วมันจะอยู่ที่มุมซ้ายบนของพาเรนต์ออฟเซ็ต
.position
ได้รับการอัปเดตใน 1.12.0 => github.com/jquery/jquery/issues/1708
.offset ()วิธีการช่วยให้เราสามารถดึงตำแหน่งปัจจุบันขององค์ประกอบที่สัมพันธ์กับเอกสาร คมชัดนี้กับ.position ()ซึ่งดึงตำแหน่งสัมพัทธ์ปัจจุบันไปยังผู้ปกครองชดเชย เมื่อวางตำแหน่งองค์ประกอบใหม่ที่ด้านบนขององค์ประกอบที่มีอยู่สำหรับการจัดการทั่วโลก (โดยเฉพาะอย่างยิ่งสำหรับการใช้การลากและวาง). offset () จะมีประโยชน์มากกว่า
ฟังก์ชั่นทั้งสองส่งคืนวัตถุธรรมดาที่มีคุณสมบัติสองประการคือความกว้างและความสูง
offset () หมายถึงตำแหน่งที่สัมพันธ์กับเอกสาร
position () หมายถึงตำแหน่งที่สัมพันธ์กับองค์ประกอบหลัก
แต่เมื่อตำแหน่ง css ของวัตถุเป็น "สัมบูรณ์" ทั้งสองฟังก์ชั่นจะคืนค่า width = 0 & height = 0