2010-03-30 36 views
5

Có thể thay đổi vị trí DIV từ tuyệt đối thành tương đối (và từ tương đối so với tuyệt đối) không? DIV sẽ vẫn ở cùng một vị trí.Chuyển đổi vị trí tuyệt đối thành số

+1

Bạn đang hỏi "Liệu nó có còn ở cùng một chỗ không?". Nếu vậy, có nó sẽ, nhưng là tương đối, nó sẽ được trong dòng tài liệu, tuyệt đối, nó sẽ không. – Zoidberg

+0

Tôi có các phần tử được định vị hoàn toàn cần được chuyển đổi thành tương đối.Vấn đề là tôi không thể tính toán vị trí tương đối đúng (trên cùng, bên trái), vì vậy các yếu tố sẽ được lưu giữ trên vị trí của chúng. – John

Trả lời

5

bạn có thể thay đổi thuộc tính với

$(object).css({position: 'absolute'}); 

Ví dụ:
Bạn có thể sử dụng phương pháp của jQuery .position() hoặc .offset() để thiết lập "đỉnh" và thuộc tính css "trái" là tốt, như vậy đối tượng của bạn nên ở lại tại vị trí của nó thay đổi từ tương đối -> tuyệt đối.

Tôi không nghĩ rằng nó hoạt động ngược lại.

code demo: http://jsbin.com/uvoka

+0

$ (đối tượng) .css ({position: 'absolute', top: dy, left: dx}); clone.css ({position: 'relative'}); không hoạt động - vị trí phần tử sau khi thay đổi thành vị trí tương đối, vị trí khác nhau nhưng khi tôi lưu trữ bù trừ và đặt lại sau khi thay đổi thành vị trí tương đối, vị trí là $ (đối tượng) .css ({position: 'absolute') : dy, left: dx}); var x = clone.offset(). Left; var y = clone.offset(). clone.css ({position: 'relative'}); offset ({top: y, left: x}); – John

+0

ví dụ nhanh của possibilitys: http://jsbin.com/uvoka Kind Regards, --Andy – jAndy

+0

Các gợi ý "giải pháp" là không chuyển đổi bất cứ điều gì !!! –

0

Bạn có thể khá dễ dàng thay đổi nó từ liên quan đến tuyệt đối bằng cách sử dụng nó offsetLeft và offsetTop giá trị như phong cách trái và đỉnh.

Cách khác xung quanh khó hơn. Bạn về cơ bản sẽ phải thay đổi nó thành tương đối và xem nơi nó kết thúc, sau đó tính toán các giá trị bù đắp mới từ bù đắp hiện tại và vị trí mong muốn.

Lưu ý rằng khi định vị tương đối, phần tử là một phần của luồng trang và có thể ảnh hưởng đến các yếu tố khác. Khi vị trí tuyệt đối, phần tử nằm ngoài luồng trang và không ảnh hưởng đến các phần tử khác. Vì vậy, nếu bạn thay đổi giữa vị trí tuyệt đối và tương đối, bạn có thể cần thực hiện các thay đổi đối với các phần tử khác nếu bạn không muốn chúng di chuyển.

8

Bởi vì định dạng trong ý kiến ​​là không làm việc tôi sẽ công bố giải pháp ở đây

$(object).css({position: 'absolute',top: dy, left:dx}); 
// dy, dx - some coordinates 
$(object).css({position: 'relative'}); 

Không làm việc: Vị trí nguyên tố sau khi thay đổi để tương đối là khác nhau.

Nhưng khi tôi lưu trữ bù đắp và đặt nó một lần nữa sau khi thay đổi để tương đối, vị trí là như nhau:

$(object).css({position: 'absolute',top: dy, left:dx}); 
var x = $(object).offset().left; 
var y = $(object).offset().top; 
$(object).css({position: 'relative'}); 
$(object).offset({ top: y, left: x }); 
+0

Thx để chia sẻ nội dung này. thực sự đã giúp tôi. –

+0

mã này có thay đổi từ tuyệt đối thành tương đối không ?? – Varun

1

prototype.js có element.absolutize() và element.relativize mà làm việc rất tốt.

Vấn đề với đi từ liên quan đến tuyệt đối là element.offsetTop và offsetLeft

chỉ cung cấp cho các bù đắp của nguyên tố của bạn để mẹ của nó. Bạn cần phải đo cumualtive bù đắp (tức

the offset of your element to its parent + 
the offset of the parent to its parent + 
the offset of its parent to its parent + 

vv)

+0

Tôi luôn tự hỏi phương pháp này thực sự là gì? Liệu nó có làm cho một phần tử con không phải là 'cơ thể' duy trì vị trí của nó, trong khi gắn nó vào phần thân của tài liệu không? Hay nó chỉ là 'absolutise' một yếu tố liên quan đến cha mẹ của nó? Nếu nó là sau này, sau đó tôi sẽ sử dụng các giải pháp, trên của bạn. Cảm ơn –

2

Nếu bạn thực sự muốn có được tổng đầu bù đắp của một phần tử đó là một đứa trẻ của các nguyên tố với vị trí tuyệt đối và tương đối bạn có thể sử dụng chức năng này

function calcTotalOffsetTop(elm) 
{ 
var totalOffsetTop = 0, 
curr   = elm; 

while(curr.parent().is(':not(body)')) 
{ 
    curr   = curr.parent(); 
    totalOffsetTop += curr[0].offsetTop; 
} 
return totalOffsetTop; 
} 

đây là mã cơ bản cho giải pháp do plodder đưa ra ở trên.

+0

Điều này là hoàn hảo cho các yếu tố bên trong một phụ huynh không phải là cơ thể, đó là chính xác những gì tôi yêu cầu. Cảm ơn. Tôi thực sự, sử dụng framework prototype.js, vì vậy tôi đã tự hỏi liệu 'absolutize()' có thực hiện điều tương tự không, như đã đề cập dưới đây, nhưng tôi có cảm giác nó chỉ làm cho một phần tử 'tuyệt đối', liên quan đến cha mẹ chứ không phải tài liệu body.So, tôi sẽ sử dụng giải pháp của bạn ... –

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