Como obter a posição na barra de posicionamento com o Javascript?
estou a tentar detectar a posição da barra de posicionamento do navegador com o JavaScript para decidir onde está na página actual. Meu palpite é que eu tenho que detectar onde o polegar na pista está, e então a altura do polegar como uma percentagem da altura total da pista. Estou a complicá-lo demais, ou o JavaScript oferece uma solução mais fácil do que isso? Alguma ideia em código?
6 answers
Pode usar element.scrollTop
e element.scrollLeft
para obter a posição vertical e horizontal, respectivamente, que foi desenrolada. element
pode ser document.body
Se você se importar com a página inteira. Pode compará-lo com element.offsetHeight
e element.offsetWidth
(novamente, element
pode ser o corpo) se precisar de percentagens.
<div>
no cromado.
elemento.scrollTop - são os pixels escondidos no topo devido ao pergaminho. Sem pergaminho o seu valor é 0.
elemento.scrollHeight - é o pixels de todo o div.
elemento.clientHeight - são os pixels que você vê no seu navegador.
var a = element.scrollTop;
Será a posição.
var b = element.scrollHeight - element.clientHeight;
Será o valor máximo para scrollTop .
var c = a / b;
Será a percentagem do pergaminho [de 0 a 1] .
document.getScroll = function() {
if (window.pageYOffset != undefined) {
return [pageXOffset, pageYOffset];
} else {
var sx, sy, d = document,
r = d.documentElement,
b = d.body;
sx = r.scrollLeft || b.scrollLeft || 0;
sy = r.scrollTop || b.scrollTop || 0;
return [sx, sy];
}
}
Devolve uma lista com dois inteiros - [scrolleft, scrollTop]
window.addEventListener("scroll", function (event) {
var scroll = this.scrollY;
console.log(scroll)
});
Se você está usando jQuery há uma função perfeita para você:.scrollTop ()
Doc aqui -> http://api.jquery.com/scrollTop/
Nota: pode usar esta função para obter ou definir a posição.
Ver também: http://api.jquery.com/?s=scroll
Resposta para 2018:
A melhor maneira de fazer estas coisas é usar a API do observador de intersecção.
A API do observador de intersecção fornece uma forma de observar assíncronamente alterações na intersecção de um elemento-alvo com um ancestral elemento ou com vista de um documento de alto nível.
Historicamente, detectando a visibilidade de um elemento, ou a relativa a visibilidade de dois elementos em relação um ao outro, foi difícil tarefa para a qual as soluções têm sido pouco fiáveis e propensos a fazendo com que o navegador e os sites que o usuário está acessando se tornem lento. Infelizmente, à medida que a web amadureceu, a necessidade de o tipo de informação cresceu. É necessária informação de intersecção para muitas razões, tais como:O carregamento preguiçoso de imagens ou outro conteúdo como uma página é desenrolado.
Implementação da detecção de intersecção no passado manipuladores e loops chamam métodos como Elemento.getBoundingClientRect () para criar a informação necessária para todo elemento afectado. Uma vez que todo este código é executado no tópico principal, mesmo um destes pode causar problemas de desempenho. Quando um site é carregado com estes testes, as coisas podem ficar feias.- implementar sites de "deslocamento infinito", onde cada vez mais conteúdo é carregado e renderizado como você se desloca, para que o Usuário não tenho de folhear as páginas.
([16]) comunicação da visibilidade dos anúncios publicitários a fim de calcular as receitas de publicidade.- decidir se deve ou não realizar tarefas ou processos de animação com base no facto de o utilizador ver ou não o resultado.
Ver o seguinte exemplo de código:
var options = { root: document.querySelector('#scrollArea'), rootMargin: '0px', threshold: 1.0 } var observer = new IntersectionObserver(callback, options); var target = document.querySelector('#listItem'); observer.observe(target);
Como o suporte do navegador não é grande, deve usar O Intersectionoobserver polyfill .