É possível verificar o overflow:auto
de uma div?
Por exemplo:
HTML
<div id="my_div" style="width: 100px; height:100px; overflow:auto;" class="my_class">
* content
</div>
JQUERY
$('.my_class').live('hover', function (event)
{
if (event.type == 'mouseenter')
{
if( ... if scrollbar visible ? ... )
{
alert('true'):
}
else
{
alert('false'):
}
}
});
Às vezes, o conteúdo é curto (sem barra de rolagem) e às vezes longo (barra de rolagem visível).
> this.innerHeight();
jsfiddle.net/p3FFL/210Talvez uma solução mais simples.
fonte
.ready()
Você pode fazer isso usando uma combinação do
Element.scrollHeight
eElement.clientHeight
atributos.De acordo com a MDN:
E:
Portanto, o elemento exibirá uma barra de rolagem se a altura da rolagem for maior que a altura do cliente, portanto, a resposta para sua pergunta é:
fonte
Eu deveria mudar um pouco do que Reigel disse:
innerHeight conta a altura do controle e seus preenchimentos superior e inferior
fonte
Isso se expande na resposta de @ Reigel. Ele retornará uma resposta para as barras de rolagem horizontais ou verticais.
Exemplo:
fonte
Você precisa de element.scrollHeight . Compare com
$(element).height()
.fonte
Criei um novo pseudo-seletor customizado para jQuery para testar se um item tem uma das seguintes propriedades css:
Eu queria encontrar o pai rolável mais próximo de outro elemento, então também escrevi outro pequeno plugin do jQuery para encontrar o pai mais próximo com estouro.
Essa solução provavelmente não apresenta o melhor desempenho, mas parece funcionar. Eu usei em conjunto com o plugin $ .scrollTo. Às vezes, preciso saber se um elemento está dentro de outro contêiner rolável. Nesse caso, eu quero rolar o elemento rolável pai contra a janela.
Provavelmente eu deveria ter empacotado isso em um único plug-in e adicionado o seletor psuedo como parte do plug-in, além de expor um método 'mais próximo' para encontrar o contêiner rolável (pai) mais próximo.
Anywho .... aqui está.
Plugin $ .isScrollable jQuery:
$ (': scrollable') pseudo-seletor jQuery:
Plug-in jQuery $ .scrollableparent ():
A implementação é bem simples
ATUALIZAÇÃO: Descobri que Robert Koritnik já tinha um pseudo-seletor muito mais poderoso: rolagem que identificará os eixos rolantes e a altura dos contêineres roláveis, como parte de seu plugin jQuery $ .scrollintoview (). scrollintoview plugin
Aqui está seu pseudo-seletor chique (adereços):
fonte
A primeira solução acima funciona apenas no IE A segunda solução acima funciona apenas no FF
Essa combinação de ambas as funções funciona nos dois navegadores:
HTH
fonte
(scrollWidth / Height - clientWidth / Height) é um bom indicador da presença de uma barra de rolagem, mas fornecerá uma resposta "falso positivo" em várias ocasiões. se você precisar ser preciso, sugiro usar a seguinte função. em vez de tentar adivinhar se o elemento é rolável - você pode rolar ...
fonte
Ugh, as respostas de todos aqui estão incompletas e vamos parar de usar o jquery nas respostas do SO, por favor. Verifique a documentação do jquery se você quiser informações sobre o jquery.
Aqui está uma função generalizada de javascript puro para testar se um elemento possui ou não barras de rolagem de uma maneira completa:
fonte
Vou estender isso ainda mais para aquelas pobres almas que, como eu, usam uma das estruturas js modernas e não a JQuery e foram totalmente abandonadas pelas pessoas desse segmento:
isso foi escrito no Angular 6, mas se você escrever React 16, Vue 2, Polymer, Ionic, React-Native, saberá o que fazer para adaptá-lo. E é todo o componente, por isso deve ser fácil.
no html, haveria uma div com a classe "elem-list" estilizada no css ou scss para ter um
height
e umoverflow
valor que não éhidden
. (maisauto
ou menossroll
)Ativei essa avaliação em um evento de rolagem porque meu objetivo final era ter "rolagens de foco automáticas" que decidem se estão rolando o conjunto inteiro de componentes horizontalmente se esses componentes não tiverem rolagem vertical disponível e, caso contrário, rolem apenas as entranhas de uma das componentes verticalmente.
mas você pode colocar a avaliação em outro lugar para que ela seja acionada por outra coisa.
o importante a lembrar aqui, é que você nunca é forçado a voltar a usar o JQuery, sempre há uma maneira de acessar as mesmas funcionalidades que ele possui sem usá-lo.
fonte
this
mantém o escopo pai;th = this;
é desnecessário.function(){}.bind(this)
Aqui está uma versão aprimorada da resposta de Evan, que parece explicar adequadamente a lógica de estouro.
fonte
As soluções fornecidas acima funcionarão na maioria dos casos, mas a verificação do scrollHeight e do overflow às vezes não é suficiente e pode falhar nos elementos body e html, como visto aqui: https://codepen.io/anon/pen/EvzXZw
1. Solução - verifique se o elemento é rolável:
Nota: os elementos com
overflow: hidden
também são tratados como roláveis ( mais informações ); portanto, você pode adicionar uma condição a essa também, se necessário:Tanto quanto sei, esse método só falha se o elemento tiver
scroll-behavior: smooth
.Explicação: O truque é que a tentativa de rolar para baixo e revertê-lo não será renderizada pelo navegador. A função superior também pode ser escrita da seguinte maneira:
Mostrar snippet de código
2. Solução - faça todas as verificações necessárias:
fonte
Aqui está a minha melhoria: parseInt adicionado. por algum motivo estranho, não funcionou sem ele.
fonte
Funciona no Chrome , Edge , Firefox e Opera , pelo menos nas versões mais recentes.
Usando JQuery ...
Configure esta função para corrigir o rodapé:
Retorna uma função. Feito dessa maneira apenas para definir o corpo e o rodapé uma vez.
E então, defina isso quando o documento estiver pronto.
Adicione isso ao seu rodapé css:
fonte
A maioria das respostas apresentadas me aproximou de onde eu precisava estar, mas não chegou lá.
Basicamente, queríamos avaliar se as barras de rolagem ficariam visíveis em uma situação normal, por essa definição, significando que o tamanho do elemento body é maior que a porta de visualização. Esta não foi uma solução apresentada, e é por isso que a estou enviando.
Espero que ajude alguém!
Essencialmente, temos a
hasScrollbar
função, mas retornando se o elemento solicitado for maior que a porta de visualização. Para ver o tamanho da porta, acabamos de usar$(window).height()
. Uma comparação rápida com o tamanho do elemento gera os resultados corretos e o comportamento desejável.fonte
Encontre um pai do elemento atual que tenha rolagem vertical ou corpo.
Pode ser usado para rolagem automática para o elemento atual via:
fonte
Uma abordagem JavaScript sem estrutura, verifica tanto a vertical quanto a horizontal
Use-o assim
fonte