¿Es posible verificar el overflow:auto
de un div?
Por ejemplo:
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'):
}
}
});
A veces el contenido es corto (sin barra de desplazamiento) y a veces largo (barra de desplazamiento visible).
> this.innerHeight();
jsfiddle.net/p3FFL/210Quizás una solución más simple.
fuente
.ready()
Puede hacerlo utilizando una combinación de los atributos
Element.scrollHeight
yElement.clientHeight
.De acuerdo con MDN:
Y:
Por lo tanto, el elemento mostrará una barra de desplazamiento si la altura de desplazamiento es mayor que la altura del cliente, por lo que la respuesta a su pregunta es:
fuente
Debería cambiar algo de lo que dijo Reigel:
innerHeight cuenta la altura del control y sus acolchados superior e inferior
fuente
Esto se expande en la respuesta de @ Reigel. Devolverá una respuesta para las barras de desplazamiento horizontal o vertical.
Ejemplo:
fuente
Necesita element.scrollHeight . Compáralo con
$(element).height()
.fuente
Hice una nueva costumbre: pseudo selector para jQuery para probar si un elemento tiene una de las siguientes propiedades css:
Quería encontrar el padre desplazable más cercano de otro elemento, así que también escribí otro pequeño complemento jQuery para encontrar el padre más cercano con desbordamiento.
Es probable que esta solución no funcione mejor, pero parece funcionar. Lo usé junto con el complemento $ .scrollTo. A veces necesito saber si un elemento está dentro de otro contenedor desplazable. En ese caso, quiero desplazar el elemento desplazable principal frente a la ventana.
Probablemente debería haber envuelto esto en un solo complemento y agregar el selector psuedo como parte del complemento, así como exponer un método 'más cercano' para encontrar el contenedor desplazable más cercano (principal).
De todos modos ... aquí está.
$ .is Plugin jQuery desplazable:
$ (': desplazable') pseudo selector de jQuery:
$ .scrollableparent () plugin jQuery:
La implementación es bastante simple
ACTUALIZAR: descubrí que Robert Koritnik ya ideó un pseudo selector desplazable mucho más poderoso que identificará los ejes desplazables y la altura de los contenedores desplazables, como parte de su complemento jQuery $ .scrollintoview (). plugin scrollintoview
Aquí está su elegante pseudo selector (accesorios):
fuente
La primera solución anterior solo funciona en IE La segunda solución anterior solo funciona en FF
Esta combinación de ambas funciones funciona en ambos navegadores:
HTH
fuente
(scrollWidth / Height - clientWidth / Height) es un buen indicador de la presencia de una barra de desplazamiento, pero le dará una respuesta "falsa positiva" en muchas ocasiones. Si necesita ser preciso, le sugiero que utilice la siguiente función. en lugar de tratar de adivinar si el elemento es desplazable, puede desplazarlo ...
fuente
Ugh, las respuestas de todos aquí están incompletas, y dejemos de usar jquery en las respuestas SO, por favor. Consulte la documentación de jquery si desea información sobre jquery.
Aquí hay una función generalizada de javascript puro para probar si un elemento tiene barras de desplazamiento de forma completa:
fuente
Voy a ampliar esto aún más para aquellas pobres almas que, como yo, usan uno de los modernos frameworks js y no JQuery y han sido totalmente abandonados por la gente de este hilo:
esto se escribió en Angular 6 pero si escribe React 16, Vue 2, Polymer, Ionic, React-Native, sabrá qué hacer para adaptarlo. Y es todo el componente, por lo que debería ser fácil.
en el html habría un div con la clase "elem-list" que está estilizada en css o scss para tener un
height
y unoverflow
valor que no lo eshidden
. (tanauto
osroll
)Disparo esta evaluación en un evento de desplazamiento porque mi objetivo final era tener "desplazamientos de enfoque automático" que deciden si están desplazando el conjunto completo de componentes horizontalmente si dichos componentes no tienen desplazamiento vertical disponible y, de lo contrario, solo desplazan las entrañas de uno de los componentes verticalmente.
pero puede colocar la evaluación en otro lugar para que otra cosa la active.
Lo importante a recordar aquí es que nunca se te obliga a volver a usar JQuery, siempre hay una manera de acceder a las mismas funcionalidades que tiene sin usarlo.
fuente
this
mantiene el ámbito primario;th = this;
es innecesariofunction(){}.bind(this)
Aquí hay una versión mejorada de la respuesta de Evan que parece explicar adecuadamente la lógica de desbordamiento.
fuente
Las soluciones proporcionadas anteriormente funcionarán en la mayoría de los casos, pero verificar el scrollHeight y el desbordamiento a veces no es suficiente y puede fallar para los elementos body y html como se ve aquí: https://codepen.io/anon/pen/EvzXZw
1. Solución: compruebe si el elemento es desplazable:
Nota: los elementos con
overflow: hidden
también se tratan como desplazables ( más información ), por lo que también puede agregar una condición contra eso si es necesario:Hasta donde sé, este método solo falla si el elemento tiene
scroll-behavior: smooth
.Explicación: El truco es que el navegador no procesará el intento de desplazarse hacia abajo y revertirlo. La función superior también se puede escribir de la siguiente manera:
Mostrar fragmento de código
2. Solución: realice todas las comprobaciones necesarias:
fuente
Aquí está mi mejora: agregado parseInt. por alguna extraña razón no funcionó sin él.
fuente
Funciona en Chrome , Edge , Firefox y Opera , al menos en las versiones más recientes.
Usando JQuery ...
Configure esta función para corregir el pie de página:
Devuelve una función. Hecho de esta manera solo para configurar el cuerpo y el pie de página una vez.
Y luego, configúrelo cuando el documento esté listo.
Agregue esto a su pie de página css:
fuente
La mayoría de las respuestas presentadas me acercaron a donde necesitaba estar, pero no del todo.
Básicamente queríamos evaluar si las barras de desplazamiento serían visibles en una situación normal, por esa definición, lo que significa que el tamaño del elemento del cuerpo es más grande que el puerto de vista. Esta no fue una solución presentada, por eso la estoy enviando.
¡Ojalá ayude a alguien!
Esencialmente, tenemos la
hasScrollbar
función, pero regresamos si el elemento solicitado es más grande que el puerto de vista. Para ver el tamaño del puerto, acabamos de usar$(window).height()
. Una comparación rápida de eso con el tamaño del elemento, produce los resultados correctos y el comportamiento deseable.fuente
Encuentre un elemento primario del elemento actual que tenga desplazamiento vertical o cuerpo.
Se puede usar para desplazarse automáticamente al elemento actual a través de:
fuente
Un enfoque JavaScript sin marco, verifica tanto vertical como horizontal
Úselo así
fuente