OK vì không có ai trả lời chính xác về tất cả về những gì:
.position().top
không đưa vào tài khoản ký quỹ của một nguyên tố.jsFiddle demo
ví dụ đầu tiên của bạn có thể làm việc trong Chrome, nhưng không phải trong Firefox, nguyên nhân của sự khác biệt nhỏ trong documentElement
.
Để giải thích cho nó, bạn sẽ phải sử dụng:
$('html, body').animate({
Bây giờ, chúng ta hãy xem sự khác biệt giữa phương pháp .position()
và .offset()
:
.position()
Lấy hiện tại tọa độ của phần tử đầu tiên trong tập hợp các phần tử đã so khớp, liên quan đến phần tử gốc.
.offset()
Lấy tọa độ hiện tại của phần tử đầu tiên, hoặc thiết lập tọa độ của mỗi yếu tố, trong tập hợp các yếu tố phù hợp, liên quan đến tài liệu.
nếu ở trên là rõ ràng, và bạn muốn để có được nội child
yếu tố vị trí bên cha mẹ vị trí *, bạn sẽ cần phải sử dụng .position()
.
#parent {
height: 300px;
background: teal;
margin: 500px 0 0 0;
overflow:scroll;
position:relative; /* NEEDED! */
}
Bây giờ, bạn có thể thiết lập lề yếu tố của nội tâm để 500px
nhưng nó top vị trí vẫn là 0
px!
console.log($('#child').position().top); // 0
do đó bạn cần phải thiết lập một phong cách top:
(thay vì margin
) và position:
tới phần tử #save
để sử dụng $('#child').position().top
: http://jsfiddle.net/RokoCB/qVWuv/203/(hoặc ít nhất là đặt một số yếu tố khác trước khi nó hoặc một số nội dung).
* Nếu bạn không đặt thuộc tính CSS "position:" thành phần tử cha bạn cần trừ vị trí trên cùng hoặc bù trừ của vị trí gốc.
Thanh cuộn phần tử '.myClass' của bạn? Nó có chứa phần tử '# myId' không? – panther
có myClass có một thanh cuộn và tôi đang sử dụng mtId trong myClass – akash
http://jsfiddle.net/qVWuv/199/ Điều này hoạt động tốt ở đây –