Tengo un enlace en una página HTML larga. Cuando hago clic en él, deseo que una div
en otra parte de la página sea visible en la ventana desplazándome hacia la vista.
Un poco como EnsureVisible
en otros idiomas.
He comprobado scrollTop
y scrollTo
parecen pistas falsas.
¿Alguien puede ayudar?
javascript
html
ɢʀᴜɴᴛ
fuente
fuente
document.getElementById('#something').scrollIntoView({ behavior: 'smooth', block: 'center' });
Si no desea agregar una extensión adicional, el siguiente código debería funcionar con jQuery.
fuente
¿Qué hay de JQuery ScrollTo? Vea este código de muestra
fuente
No hay desplazamiento elegante, pero debería llevarte allí.
fuente
La dificultad con el desplazamiento es que es posible que no solo necesite desplazarse por la página para mostrar un div, sino que también puede necesitar desplazarse dentro de los divs desplazables en cualquier número de niveles.
La propiedad scrollTop está disponible en cualquier elemento DOM, incluido el cuerpo del documento. Al configurarlo, puede controlar qué tan abajo se desplaza algo. También puede usar las propiedades clientHeight y scrollHeight para ver cuánto desplazamiento se necesita (el desplazamiento es posible cuando clientHeight (ventana gráfica) es menor que scrollHeight (la altura del contenido).
También puede usar la propiedad offsetTop para averiguar en qué parte del contenedor se encuentra un elemento.
Para construir una rutina de "desplazamiento a la vista" de propósito general desde cero, necesitaría comenzar en el nodo que desea exponer, asegurarse de que esté en la parte visible de su padre, luego repetir lo mismo para el padre, etc., todo el camino hasta llegar a la cima.
Un paso de esto se vería así (código no probado, sin verificar casos extremos):
fuente
Puede utilizar el
Element.scrollIntoView()
método mencionado anteriormente. Si lo deja sin parámetros dentro, tendrá un desplazamiento feo instantáneo . Para evitarlo, puede agregar este parámetro -behavior:"smooth"
.Ejemplo:
Simplemente reemplácelo
scroll-here-plz
con sudiv
elemento o en un sitio web. Y si ves tu elemento en la parte inferior de tu ventana o la posición no es la que esperabas, juega con el parámetroblock: ""
. Puede usarblock: "start"
,block: "end"
oblock: "center"
.Recuerde: utilice siempre parámetros dentro de un objeto {}.
Si aún tiene problemas, vaya a https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
Hay documentación detallada para este método.
fuente
Esto funcionó para mi
fuente
Respuesta publicada aquí : la misma solución a su problema.
Editar: la respuesta de JQuery es muy buena si desea un desplazamiento suave, no lo había visto en acción antes.
fuente
¿Por qué no un ancla con nombre?
fuente
La propiedad que necesita es location.hash. Por ejemplo:
location.hash = 'top'; // saltaría al ancla con nombre "top
No sé cómo hacer la bonita animación de desplazamiento sin el uso de dojo o algún juego de herramientas como ese, pero si solo lo necesitas para saltar a un ancla, location.hash debería hacerlo.
(probado en FF3 y Safari 3.1.2)
fuente
No puedo agregar un comentario a la respuesta de futtta anterior, pero para un desplazamiento más suave, use:
fuente
scrollTop (IIRC) es el lugar del documento al que se desplaza la parte superior de la página. scrollTo desplaza la página de modo que la parte superior de la página sea donde usted especifique.
Lo que necesita aquí son algunos estilos manipulados de Javascript. Digamos que si quisiera el div fuera de la pantalla y se desplaza hacia adentro desde la derecha, establecería el atributo izquierdo del div al ancho de la página y luego lo disminuiría en una cantidad establecida cada pocos segundos hasta que esté donde desee.
Esto debería apuntarle en la dirección correcta.
Adicional: Lo siento, pensé que querías que un div separado 'saliera' de algún lugar (algo así como lo hace este sitio a veces), y no mover toda la página a una sección. El uso adecuado de anclajes lograría ese efecto.
fuente
Hay un complemento jQuery para el caso general de desplazamiento a un elemento DOM, pero si el rendimiento es un problema (¿y cuándo no lo es?), Le sugiero que lo haga manualmente. Esto implica dos pasos:
quirksmode da una buena explicación del mecanismo detrás del primero. Esta es mi solución preferida:
Utiliza la conversión de nulo a 0, que no es la etiqueta adecuada en algunos círculos, pero me gusta :) La segunda parte usa
window.scroll
. Entonces el resto de la solución es:¡Voila!
fuente
Personalmente, encontré que la respuesta anterior basada en jQuery de Josh es la mejor que vi, y funcionó perfectamente para mi aplicación ... por supuesto, ya estaba usando jQuery ... ciertamente no habría incluido toda la biblioteca jQ solo por eso un proposito.
¡Salud!
EDITAR: OK ... tan solo unos segundos después de publicar esto, vi otra respuesta justo debajo de la mía (no estoy seguro si todavía está debajo de mí después de una edición) que decía usar:
document.getElementById ('your_element_ID_here'). scrollIntoView ();
¡Esto funciona perfectamente y en mucho menos código que la versión jQuery! No tenía idea de que había una función incorporada en JS llamada .scrollIntoView (), ¡pero ahí está! Entonces, si quieres la animación elegante, usa jQuery. Rápido y sucio ... ¡usa este!
fuente
Para un desplazamiento suave, este código es útil
fuente
Corrígeme si me equivoco, pero leo la pregunta una y otra vez y sigo pensando que Angus McCoteup estaba preguntando cómo configurar un elemento para que esté en posición: fijo.
Angus McCoteup, consulte http://www.cssplay.co.uk/layouts/fixed.html : si desea que su DIV se comporte como un menú allí, eche un vistazo a un CSS allí
fuente