Propriedades de Rolagem em JavaScript: pageXOffset, scrollX, pageYOffset e scrollY

Propriedades de Rolagem no Objeto Window

Em desenvolvimento web, obter a posição de rolagem é crucial para funcionalidades como navegação fixa ou botões interativos. As propriedades pageXOffset, scrollX, pageYOffset e scrollY fornecem acesso direto a esses valores.

Definições e Uso

pageXOffset e scrollX retornam a distância horizontal rolada em pixels. São equivalentes e de leitura, acessíveis via window.pageXOffset ou window.scrollX.

pageYOffset e scrollY indicam a distância vertical rolada, também equivalentes e somente leitura.

Compatibilidade entre Navegadores

Navegadores modernos suportam pageXOffset e pageYOffset. Para Internet Explorer 8 e anteriores, utilize document.body.scrollLeft e document.body.scrollTop como alternativas.

Relações e Restrições

Todas as propriedades são de leitura. Para alterar a posição de rolagem, empregue métodos como window.scrollTo(). A equivalência entre pageXOffset e scrollX, e entre pageYOffset e scrollY, é garantida em ambientes compatíveis.

Exemplos de Aplicação

Obter a posição atual com fallback para navegadores antigos:

const deslocamentoX = window.pageXOffset || document.body.scrollLeft;
const deslocamentoY = window.pageYOffset || document.body.scrollTop;
console.log(`Deslocamento X: ${deslocamentoX}px, Y: ${deslocamentoY}px`);

Monitorar eventos de rolagem em tempo real:

document.addEventListener('scroll', function() {
    const x = window.scrollX;
    const y = window.scrollY;
    console.log(`Rolagem detectada: horizontal=${x}, vertical=${y}`);
});

Criar um botão para retornar ao topo da página:

const botaoTopo = document.getElementById('botao-topo');

window.addEventListener('scroll', () => {
    botaoTopo.style.display = window.scrollY > 200 ? 'block' : 'none';
});

botaoTopo.addEventListener('click', () => {
    window.scrollTo({ top: 0, behavior: 'smooth' });
});

Fixar um elemento de navegação ao rolar:

const nav = document.querySelector('nav');

window.addEventListener('scroll', () => {
    const rolagemVertical = window.pageYOffset;
    nav.classList.toggle('fixo', rolagemVertical > 80);
});

Técnicas Avançadas

Definir a posição de rolagem usando scrollTo():

// Rolar para coordenadas específicas
window.scrollTo(150, 400);

// Rolar suavemente com objeto de parâmetros
window.scrollTo({
    left: 100,
    top: 300,
    behavior: 'smooth'
});

Combinar com getBoundingClientRect() para animações baseadas em visibilidade:

const secao = document.querySelector('.secao-animada');
const limites = secao.getBoundingClientRect();

if (limites.top < window.innerHeight) {
    secao.classList.add('visivel');
}

Tags: javascript DOM pageXOffset scrollX pageYOffset

Publicado em 7-4 16:20