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?

Author: danwellman, 2010-03-20

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.

 153
Author: Max Shawabkeh, 2010-03-20 00:33:13
Fiz isto por um ... <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] .

 97
Author: Gatsby, 2015-08-15 00:26:13
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]

 37
Author: kennebec, 2018-09-19 19:28:42
É assim:
window.addEventListener("scroll", function (event) {
    var scroll = this.scrollY;
    console.log(scroll)
});
 7
Author: Brayan Pastor, 2018-04-23 20:37:10

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

 4
Author: Simon the Salmon, 2013-07-08 14:18:55

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.
  • 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.
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.

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 .

 4
Author: str, 2018-01-19 16:03:02