Desejo obter a posição de um elemento em relação à viewport do navegador (a viewport na qual a página é exibida, não a página inteira). Como isso pode ser feito em JavaScript?
Muito Obrigado
javascript
Waleed Eissa
fonte
fonte
Respostas:
As respostas existentes agora estão desatualizadas. O
getBoundingClientRect()
método nativo já existe há algum tempo e faz exatamente o que a pergunta pede. Além disso, ele é suportado em todos os navegadores (incluindo o IE 5, ao que parece!)Na página MDN :
O valor retornado é um objeto TextRectangle, que contém propriedades esquerda, superior, direita e inferior somente leitura que descrevem a caixa de borda, em pixels, com a parte superior esquerda relativa à parte superior esquerda da janela de visualização .
Você usa assim:
fonte
getBoundingClientRect().top
não está no meu IE11, retorna 0. Você tem alguma solução.No meu caso, apenas para garantir a rolagem, adicionei o window.scroll à equação:
Isso me permite obter a posição relativa real do elemento no documento, mesmo que ele tenha sido rolado.
fonte
getBoundingClientRect().top
não está no meu IE11, ele retorna 0. Você tem alguma solução.window.scrollY || window.pageYOffset
pode melhorar o suporteEditar: adicione algum código para explicar a rolagem da página.
O argumento id é o id do elemento cujo deslocamento você deseja. Adaptado de uma postagem de modo quirks .
fonte
fonte
Podes tentar:
node.offsetTop - window.scrollY
Funciona no Opera com a meta tag da viewport definida.
fonte
offsetTop
é relativa ao elemento posicionado mais próximo. Que, dependendo da estrutura da página, pode ou não ser elemento raiz.O jQuery implementa isso de maneira bastante elegante. Se você procurar a fonte para jQuery
offset
, verá que é basicamente assim que é implementado:fonte
A função nesta página retornará um retângulo com as coordenadas superior, esquerda, altura e largura de um elemento passado em relação à porta de visualização do navegador.
fonte
fonte
fonte
Obrigado por todas as respostas. Parece que o Prototype já possui uma função que faz isso (a função page ()). Ao visualizar o código fonte da função, descobri que ela primeiro calcula a posição do deslocamento do elemento em relação à página (ou seja, a parte superior do documento) e depois subtrai o scrollTop a partir dela. Veja o código fonte do protótipo para mais detalhes.
fonte
Estou assumindo que
btn1
existe um elemento com um ID na página da Web e também que o jQuery está incluído. Isso funcionou em todos os navegadores modernos do Chrome, FireFox, IE> = 9 e Edge. O jQuery está sendo usado apenas para determinar a posição em relação ao documento.fonte
Às vezes,
getBoundingClientRect()
o valor da propriedade do objeto mostra 0 para o IE. Nesse caso, você deve definirdisplay = 'block'
o elemento. Você pode usar o código abaixo para que todo o navegador seja compensado.Estenda a funcionalidade jQuery:
Usar :
fonte