Можно ли получить позицию div в окне просмотра браузера? Не в документе. В окне - PullRequest
16 голосов
/ 17 октября 2008

Это возможно в IE7 или Firefox?

Ответы [ 6 ]

33 голосов
/ 17 октября 2008

Вы можете сделать это в обоих случаях - получить положение относительно документа, затем вычесть положение прокрутки.

var e = document.getElementById('xxx');
var offset = {x:0,y:0};
while (e)
{
    offset.x += e.offsetLeft;
    offset.y += e.offsetTop;
    e = e.offsetParent;
}

if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
{
    offset.x -= document.documentElement.scrollLeft;
    offset.y -= document.documentElement.scrollTop;
}
else if (document.body && (document.body.scrollTop || document.body.scrollLeft))
{
    offset.x -= document.body.scrollLeft;
    offset.y -= document.body.scrollTop;
}
else if (window.pageXOffset || window.pageYOffset)
{
    offset.x -= window.pageXOffset;
    offset.y -= window.pageYOffset;
}

alert(offset.x + '\n' + offset.y);
7 голосов
/ 26 марта 2016

[Вставка из ответа, который я дал здесь ]

Нативный getBoundingClientRect() метод существует уже довольно давно и делает именно то, о чем просит вопрос. Плюс он поддерживается во всех браузерах (включая IE 5, кажется!)

С эта страница MDN:

Возвращаемое значение представляет собой объект TextRectangle, который содержит свойства Только для чтения слева, сверху, справа и снизу, описывающие рамку в пикселях, с верхним левым относительно верхнего левого окна просмотра .

Вы используете это так:

var viewportOffset = el.getBoundingClientRect();
// these are relative to the viewport, i.e. the window
var top = viewportOffset.top;
var left = viewportOffset.left;
4 голосов
/ 17 октября 2008

Попробуйте Размеры jQuery плагин . См. это демо .

$('#myelement.').offset();
3 голосов
/ 18 октября 2008

В IE и Firefox 3 вы можете использовать для этого getBoundingClientRect ; рамки не нужны.

Но, да, вы должны использовать фреймворк, если вам нужна поддержка и других браузеров.

0 голосов
/ 17 октября 2008

При использовании прототипа это будет:

$('divname').viewportOffset.top
$('divname').viewportOffset.left
0 голосов
/ 17 октября 2008

Вы можете вычесть значение offsetTop элемента div из документа.

Это похоже на IE7 и FF3, но на очень простой странице. Я не проверял вложенные DIVs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...