Desative as barras de rolagem verticais e horizontais dos navegadores


117

É possível desabilitar as barras de rolagem vertical e horizontal do navegador usando jQuery ou javascript?


Acho que em algumas situações, especialmente se você deseja alternar entre rolar e não rolar, essa solução é mais preferível: stackoverflow.com/questions/8701754/…
Yousef Salimpour

Você pode encontrar uma resposta mais completa para esta pergunta aqui stackoverflow.com/a/25561646/1922144
davidcondrey

Respostas:


144

No caso de você precisar da possibilidade de ocultar e mostrar as barras de rolagem dinamicamente, você pode usar

$("body").css("overflow", "hidden");

e

$("body").css("overflow", "auto");

em algum lugar do seu código.


4
O overflow hidden nem sempre funciona no IE. Veja a resposta de AnthonyWJones abaixo.
Tiago Almeida

4
oveflow: hiddennão impedirá nada em smartphones.
dvlden

No cromo, isso desativa a barra de rolagem sem ocultá-la (ela ainda está lá e ainda mudando o tamanho de tudo o mais, mas agora está acinzentada)
taltamir

120
function reloadScrollBars() {
    document.documentElement.style.overflow = 'auto';  // firefox, chrome
    document.body.scroll = "yes"; // ie only
}

function unloadScrollBars() {
    document.documentElement.style.overflow = 'hidden';  // firefox, chrome
    document.body.scroll = "no"; // ie only
}

5
Dois votos positivos são notavelmente pequenos por serem a única resposta em javascript puro.
Fzs2

2
@HermannIngjaldsson: Ver OP pediu uma solução JavaScript ou jQuery e aceitou uma solução jQuery 4 anos atrás, só faz sentido. Não estou dizendo que a resposta não seja boa, apenas afirmando o óbvio sobre os votos mais baixos. +1 de mim de qualquer maneira.
Não,

esta é a única solução que funcionou para mim, uma vez que o overflow oculto do corpo não ataca todo o documento, esta é a solução certa para este problema! muito obrigado, você me economizou muito tempo!
Adnane.T,

Esta é uma solução brilhante e merece um voto positivo. Ele também resolve o problema com css fixo, onde a página será rolada para o topo.
haipham23

50

Experimente CSS

<body style="overflow: hidden">

15
Para compatibilidade do navegador, eu adicionaria este estilo à tag HTML também: html, body {overflow: hidden;}
Ady

32

Até agora temos overflow: escondido no corpo. No entanto, o IE nem sempre honra isso e você precisa colocar scroll = "no" no elemento body e / ou colocar overflow: hidden no elemento html também.

Você pode levar isso adiante quando precisar 'assumir o controle' da porta de visualização, você pode fazer o seguinte: -

<style>
 body {width:100%; height:100%; overflow:hidden; margin:0; }
 html {width:100%; height:100%; overflow:hidden; }
</style>

Um elemento com altura de 100% no corpo tem a altura total da janela de visualização e o elemento posicionado absolutamente usando bottom: nnPX será definido nn pixels acima da borda inferior da janela, etc.


2
não faz o ',' deveria ser ';', no css do corpo?
paynestrike de

12

Experimente CSS.

Se você deseja remover o Horizontal

overflow-x: hidden;

E se você quiser remover o Vertical

overflow-y: hidden;

10

Em versões modernas do IE (IE10 e superior), as barras de rolagem podem ser ocultadas usando a -ms-overflow-stylepropriedade .

html {
     -ms-overflow-style: none;
}

No Chrome, as barras de rolagem podem ser estilizadas:

::-webkit-scrollbar {
    display: none;
}

Isso é muito útil se você quiser usar a rolagem do corpo 'padrão' em um aplicativo da web, que é consideravelmente mais rápido do que overflow-y: scroll.


apenas isso funcionou para mim em todas as respostas :) obrigado!
Gediminas

9

Caso você também precise de suporte para Internet Explorer 6, basta estourar o html

$("html").css("overflow", "hidden");

e

$("html").css("overflow", "auto");

5

O IE tem algum bug com as barras de rolagem. Portanto, se você quiser um dos dois, deve incluir o seguinte para ocultar a barra de rolagem horizontal:

overflow-x: hidden;
overflow-y:scroll;

e para ocultar vertical:

overflow-y: hidden;
overflow-x: scroll;


4

(Ainda não posso comentar, mas gostaria de compartilhar):

O código de Lyncee funcionou para mim no navegador de desktop. No entanto, no iPad (Chrome, iOS 9), travou o aplicativo. Para consertar, mudei

document.documentElement.style.overflow = ...

para

document.body.style.overflow = ...

que resolveu meu problema.


2

Porque o Firefox tem uma seta tecla de atalho, você provavelmente vai querer colocar um <div>em torno dele com estilo CSS: overflow:hidden;.


2

Usando JQuery, você pode desativar a barra de rolagem com este código:

$('body').on({
    'mousewheel': function(e) {
        if (e.target.id == 'el') return;
        e.preventDefault();
        e.stopPropagation();
     }
});

Além disso, você pode habilitá-lo novamente com este código:

 $('body').unbind('mousewheel');
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.