mã bạn là hết sức tồi tệ, và tôi đã một số cải tiến trên Pacerier để cung cấp cho, vì vậy tôi sẽ gửi câu trả lời của riêng tôi:
function getPos(el, rel)
{
var x=0, y=0;
do {
x += el.offsetLeft;
y += el.offsetTop;
el = el.offsetParent;
}
while (el != rel)
return {x:x, y:y};
}
Nếu chỉ được sử dụng như getPos(myElem)
sẽ trở lại vị trí toàn cầu. Nếu phần tử thứ hai được bao gồm làm đối số (tức là getPos(myElem, someAncestor)
) là tổ tiên/cha mẹ của người đầu tiên (ít nhất là ở đâu đó trong chuỗi) thì nó sẽ cung cấp vị trí liên quan đến tổ tiên đó. Nếu rel
không nhất định (ví dụ còn lại undefined
), sau đó nó cố tình sử dụng !=
thay vì !==
vì nó nên dừng lại khi el
được cho null
và rel
là undefined
là tốt, vì thế bình đẳng không nghiêm ngặt là có mục đích, không thay đổi nó . Nó cũng trả về một đối tượng, vì đó là một chút dễ đọc hơn trong việc sử dụng hơn một mảng (và vì vậy bạn có thể làm một cái gì đó như getPos().x
).
Điều này có nguồn gốc từ giải pháp của Pacerier, vì vậy nếu bạn sẽ upvote điều này, hãy xem xét upvoting của mình quá.
Nguồn
2016-02-15 19:44:47
Xin chào Mark, cảm ơn mã của bạn, nhưng khi trang có lề tại b ody, vị trí không còn được sửa nữa, bạn có giải pháp cho điều đó không? Cảm ơn trước – Johnny
cách thêm 'document.body.offsetLeft' và' document.body.offsetTop' vào giá trị trả về? – YOU
Điều này sẽ hoạt động tốt bất kể lề cơ thể. Đảm bảo rằng bạn đang sử dụng loại tài liệu Chế độ chuẩn. Trong Quirks, tất cả mọi phiên cược đều bị tắt. – bobince