2010-06-15 27 views
68

Đâ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 đi về việc bù đắp đúng của một phần tử trong jQuery?làm thế nào để có được bù đắp đúng của một yếu tố? - jQuery

tôi có thể làm:

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

và nó là hợp lệ.

Nhưng có vẻ như rằng:

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

là undefined.

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

Cảm ơn !!

Trả lời

127

Alex, Gary:

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

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

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

+0

điều này không hoạt động với các biến đổi CSS, bù đắp sẽ bị ảnh hưởng bởi biến đổi nhưng outerWidth (và chiều rộng) sẽ không. –

+2

Đây là phần bù trừ từ bên phải của cửa sổ. Đối với offset từ phía bên trái của cửa sổ, xem [answer] của cdZ (http://stackoverflow.com/a/5643921/675721). –

+0

cạnh phải nhất của phần tử có thể được tìm thấy nhiều hơn "nguyên bản" '$ bất kỳ [0] .getBoundingClientRect(). Right'. điều này liên quan đến cạnh trái của cửa sổ. – pstanton

27
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 đó lại là lúc 10 , và phải không phải là 12 nhưng 11. –

+30

Đây là câu trả lời sai. Trong CSS, "left" ngụ ý "offset của điểm ngoài cùng bên trái của phần tử từ bên trái của cửa sổ/parent", và "right" ngụ ý "offset 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ổ/parent ". Vì vậy, câu trả lời đúng sẽ là: 'var rt = ($ (window) .width() - ($ whatever.offset(). Left + $ whatever.outerWidth()));' –

+0

Cách mọi người không nhận thấy đây là câu trả lời không chính xác: 0 –

14

Có lẽ tôi là sự hiểu lầm câu hỏi của bạn, nhưng bù đắp được cho là cung cấp cho bạn hai biến: a ngang và 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 phải biết được nơi đường biên bên phải của nguyên tố của bạn, sau đó bạn nên sử dụng:

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

Đó là một mẹo để có được quyền của một yếu tố. Cảm ơn Greg! – n2lose

7

Chỉ cần thêm vào những gì Greg đã nói:

$ ("# whatever"). Offset(). Left + $ ("# outerWidth()

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

$ ("# parent_container") innerWidth () - ($ ("# bất kỳ"). offset(). left + $ ("# whatever"). outerWidth())

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

3

Brendon Crawford có câu trả lời hay nhất ở đây (trong nhận xét), vì vậy tôi sẽ chuyển câu trả lời cho đến khi anh ấy làm (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)); 
3

Thực tế, các tác vụ này chỉ hoạt động khi cửa sổ không được cuộn ở vị trí trên cùng bên trái.
Bạn cần phải trừ đi giá trị sổ cuộn để có được một bù đắp đó là hữu ích cho các yếu tố định vị để họ ở lại 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)); 
1

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

Nhận điểm neo của div/table (right) bạn có thể sử dụng mã bên dưới.

$("#whatever").width(); 
2

Có một DOM API bản địa mà đạt được điều này ra khỏi hộp - getBoundingClientRect:

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

Nhưng getBoundingClientRect trả về tương đối so với khung nhìn không liên quan đến tài liệu, đó là những gì offset() cung cấp. –

Các vấn đề liên quan