làm thế nào để có được phần tử bù đúng? - jQuery


85

Đây có lẽ là một câu hỏi thực sự đơn giản, nhưng làm thế nào để tôi có được sự bù đắp phù hợp của một phần tử trong jQuery?

Tôi có thể làm:

$("#whatever").offset().left;

và nó hợp lệ.

Nhưng có vẻ như:

$("#whatever").offset().right 

không định nghĩa được.

Vậy làm thế nào để thực hiện điều này trong jQuery?

Cảm ơn!!

Câu trả lời:


160

Alex, Gary:

Theo yêu cầu, đây là bình luận của tôi được đăng như một câu trả lời:

var rt = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));

Cảm ơn vì đã cho tôi biết.

Trong mã giả có thể được biểu thị như sau:

Phần bù bên phải là:

Chiều rộng của cửa sổ MINUS
(Độ lệch bên trái của phần tử CỘNG là chiều rộng bên ngoài của phần tử )


điều này không hoạt động với chuyển đổi CSS, bù đắp sẽ bị ảnh hưởng bởi biến đổi nhưng bên ngoài (và chiều rộng) thì không.
Jonathan.

2
Đây là phần bù từ phía bên phải của cửa sổ. Đối với phần bù từ phía bên trái của cửa sổ, hãy xem câu trả lời của cdZ .
Viết mã

cạnh ngoài cùng bên phải của một phần tử có thể được tìm thấy "nguyên bản" hơn $whatever[0].getBoundingClientRect().right. điều này tương đối so với cạnh trái của cửa sổ.
pstanton

Cảm ơn brendon. Câu trả lời hữu ích.

29
var $whatever        = $('#whatever');
var ending_right     = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));

Tham khảo: .outerWidth ()


1
tôi nghĩ rằng cần phải thêm chúng và sau đó trừ đi 1. nếu chiều rộng là 2, sau đó bên trái là 10, và quyền không phải là lúc 12 nhưng 11.
nonopolarity

31
Đây là một câu trả lời không chính xác. Trong CSS, "left" ngụ ý "độ lệch của điểm ngoài cùng bên trái của phần tử từ bên trái cửa sổ / cha" và "phải" ngụ ý "độ lệch của điểm ngoài cùng bên phải của phần tử từ bên phải của cửa sổ / cha ". Vì vậy, câu trả lời chính xác sẽ là:var rt = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));
Brendon Crawford

5
@BrendonCrawford Bạn nên chuyển nhận xét đó thành câu trả lời.
Gary

3
Một lưu ý cho bất kỳ ai xem qua - câu trả lời ở trên đã được chỉnh sửa để phản ánh chính xác nhận xét của Brendon.
Chris Marasti-Georg

16

Có thể tôi đang hiểu sai câu hỏi của bạn, nhưng bù đắp được cho là cung cấp cho bạn hai biến số: một chiều ngang và một chiều dọc. Điều này xác định vị trí của phần tử. Vì vậy, những gì bạn đang tìm kiếm là:

$("#whatever").offset().left

$("#whatever").offset().top

Nếu bạn cần biết ranh giới bên phải của phần tử của bạn ở đâu, thì bạn nên sử dụng:

$("#whatever").offset().left + $("#whatever").outerWidth()

9

Chỉ là một bổ sung cho những gì Greg đã nói:

$ ("# bất cứ điều gì"). offset (). left + $ ("# bất cứ điều gì"). Ngoài độ rộng ()

Mã này sẽ có vị trí bên phải so với bên trái. Nếu mục đích là để có được vị trí bên phải so với bên phải (như khi sử dụng thuộc tính CSS right) thì cần bổ sung mã như sau:

$ ("# parent_container"). innerWidth () - ($ ("# bất cứ điều gì"). offset (). left + $ ("# bất cứ điều gì"). externalWidth ())

Mã này hữu ích trong các hoạt ảnh mà bạn phải đặt phía bên phải làm neo cố định khi ban đầu bạn không thể đặt thuộc righttính trong CSS.


6

Trên thực tế, những điều này chỉ hoạt động khi cửa sổ hoàn toàn không được cuộn từ vị trí trên cùng bên trái.
Bạn phải trừ các giá trị cuộn cửa sổ để có được độ lệch hữu ích cho việc định vị lại các phần tử để chúng ở trên trang:

var offset = $('#whatever').offset();

offset.right = ($(window).width() + $(window).scrollLeft()) - (offset.left + $('#whatever').outerWidth(true));
offset.bottom = ($(window).height() + $(window).scrollTop()) - (offset.top + $('#whatever').outerHeight(true));

5

Có một API DOM gốc có thể đạt được điều này ngay lập tức - getBoundingClientRect:

document.querySelector("#whatever").getBoundingClientRect().right

2
Nhưng getBoundsClientRect trả về liên quan đến khung nhìn không liên quan đến tài liệu, đó là những gì offset () cung cấp.
Sai Dubbaka

4

Brendon Crawford đã có câu trả lời hay nhất ở đây (trong phần bình luận), vì vậy tôi sẽ chuyển nó sang một câu trả lời cho đến khi anh ấy trả lời được (và có thể mở rộng một chút).

var offset = $('#whatever').offset();

offset.right = $(window).width() - (offset.left + $('#whatever').outerWidth(true));
offset.bottom = $(window).height() - (offset.top + $('#whatever').outerHeight(true));

2

Lấy điểm neo của a div/table (left) = $("#whatever").offset().left;- ok!

Lấy điểm neo của một div/table (right)bạn có thể sử dụng đoạn mã dưới đây.

 $("#whatever").width();
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.