Làm cách nào để tìm vị trí tuyệt đối của một phần tử bằng jQuery?


398

Có cách nào để tìm vị trí tuyệt đối của một phần tử, tức là liên quan đến điểm bắt đầu của cửa sổ, sử dụng jQuery không?

Câu trả lời:


650

.offset() sẽ trả về vị trí bù của một phần tử dưới dạng một đối tượng đơn giản, ví dụ:

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

Bạn có thể sử dụng giá trị trả về này để định vị các phần tử khác tại cùng một vị trí:

$(anotherElement).css(position)

90
Tôi luôn quên bài này và tìm lại bài đăng của bạn khi tôi google: p
Aren

16
Điều này dường như không phải lúc nào cũng trả lại vị trí tuyệt đối do sự khác biệt về đường viền, v.v.
Tom

8
Tôi đang sử dụng chrome và offset()không trả lại tọa độ hàng đầu thích hợp. Thay vào đó, nó trả về khoảng 300 pixel so với tọa độ trên cùng của phần tử trong tài liệu. Tại sao??
SoLoGHoST

1
chrome, FF và IE đang cho kết quả khác nhau :(
Rizwan Mumtaz

3
@Aren Tôi luôn quên cái này và thấy bình luận của bạn thật thú vị :)
Alex

197

Lưu ý rằng $(element).offset()cho bạn biết vị trí của một yếu tố liên quan đến tài liệu . Điều này hoạt động tuyệt vời trong hầu hết các trường hợp, nhưng trong trường hợpposition:fixed bạn có thể nhận được kết quả bất ngờ.

Nếu tài liệu của bạn dài hơn chế độ xem và bạn đã cuộn theo chiều dọc xuống dưới cùng của tài liệu, thì giá trị position:fixedphần tử của bạn sẽ lớn hơnoffset() giá trị mong đợi theo số lượng bạn đã cuộn.

Nếu bạn đang tìm kiếm một giá trị liên quan đến chế độ xem (cửa sổ), thay vì tài liệu trên một vị trí: phần tử cố định, bạn có thể trừ scrollTop()giá trị của tài liệu khỏi phần tử cố địnhoffset().top . Thí dụ:$("#el").offset().top - $(document).scrollTop()

Nếu position:fixedphần tử bù của phần tử là tài liệu , bạn muốn đọc parseInt($.css('top'))thay thế.


8
Tôi đã tìm kiếm chính xác cho điều này! Đối với những người không như tôi: giá trị bị trừ là$(document).scrollTop()
Tiến sĩ Gianluigi Zane Zanettini

3
Tuyệt vời! Đây phải là câu trả lời hàng đầu!
Shivanshu Goyalty
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.