Qual é a maneira mais rápida de verificar se um elemento possui barras de rolagem?
Uma coisa, claro, é verificar se o elemento é maior do que sua janela de visualização, o que pode ser feito facilmente verificando estes dois valores:
el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth
mas isso não significa que ele também tenha barras de rolagem (portanto, pode ser rolado por humanos).
Questão
Como faço para verificar se há barras de rolagem em um 1 cross browser e 2 única javascript (como em nenhum jQuery ) caminho?
Somente Javascript, porque preciso da menor sobrecarga possível, porque gostaria de escrever um filtro seletor jQuery muito rápido
// check for specific scrollbars
$(":scrollable(x/y/both)")
// check for ANY scrollbar
$(":scrollable")
Suponho que teria que verificar as overflow
configurações de estilo, mas como faço isso em um navegador cruzado?
Edição adicional
Não apenas overflow
configurações de estilo. Verificar se um elemento possui uma barra de rolagem não é tão trivial quanto parece. A primeira fórmula que escrevi acima funciona bem quando o elemento não tem uma borda, mas quando tem (especialmente quando a borda é de largura considerável), a offset
dimensão pode ser maior do que a scroll
dimensão, mas o elemento ainda pode ser rolável. Na verdade, temos que subtrair as bordas da offset
dimensão para obter a janela de visualização rolável real do elemento e compará-la à scroll
dimensão.
Para referência futura
:scrollable
O filtro seletor jQuery está incluído no meu .scrollintoview()
plugin jQuery. O código completo pode ser encontrado na postagem do meu blog se alguém precisar. Mesmo não fornecendo a solução real, o código de Soumya me ajudou consideravelmente a resolver o problema. Isso me apontou na direção certa.
overflow:hidden
instalado nele? Haveria conteúdo em excesso, mas ainda não é rolável. O problema não é tão simples quanto pode parecer.