Tengo un documento HTML con imágenes en formato de cuadrícula usando <ul><li><img...
. La ventana del navegador tiene desplazamiento vertical y horizontal.
Pregunta:
Cuando hago clic en una imagen <img>
, ¿cómo hago para que todo el documento se desplace a una posición donde está la imagen que acabo de hacer clic top:20px; left:20px
?
He tenido una búsqueda aquí para publicaciones similares ... aunque soy bastante nuevo en JavaScript y quiero entender cómo se logra esto por mí mismo.
javascript
jquery
Nasir
fuente
fuente
Respuestas:
Como quieres saber cómo funciona, lo explicaré paso a paso.
Primero desea vincular una función como el controlador de clics de la imagen:
Eso aplicará el controlador de clics a una imagen con
id="someImage"
. Si desea hacer esto a todas las imágenes, reemplácelas'#someImage'
con'img'
.Ahora para el código de desplazamiento real:
Obtenga las compensaciones de imagen (en relación con el documento):
Resta 20 de
top
yleft
:Ahora anime las propiedades CSS de desplazamiento hacia arriba y desplazamiento hacia la izquierda de
<body>
y<html>
:fuente
.scrollIntoView
método W3C cuando los elementos están anidados dentro de múltiples contenedores desbordados.Element.scrollIntoView()
: developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewscrollIntoView
Hay un método DOM llamado
scrollIntoView
, que es compatible con todos los principales navegadores, que alineará un elemento con la parte superior / izquierda de la ventana gráfica (o lo más cerca posible).En los navegadores compatibles, puede proporcionar opciones:
Alternativamente, si todos los elementos tienen ID únicos, simplemente puede cambiar la
hash
propiedad dellocation
objeto para la compatibilidad con el botón de retroceso / avance:Después de eso, solo ajuste las propiedades
scrollTop
/scrollLeft
en -20:fuente
$("#myImage")[0].scrollIntoView(false);
alineará el elemento en la parte inferior de la ventana.scrollIntoView
puede ser una experiencia confusa para los usuarios sin algún tipo de animación.scrollIntoView
con el parámetro booleano. Intentaré enviar una solicitud de extracción para caniuse.com más tarde.<td>
elementos a la vista, en su lugar tuve que desplazar a su padre (<tr>
) y funcionó.La solución más simple que he visto
Tutorial aquí
fuente
Existen métodos para desplazar el elemento directamente a la vista, pero si desea desplazarse a un punto relativo desde un elemento, debe hacerlo manualmente:
Dentro del controlador de clics, obtenga la posición del elemento en relación con el documento, reste
20
y usewindow.scrollTo
:fuente
Eche un vistazo al complemento jQuery.scrollTo . Aquí hay una demostración .
Este complemento tiene muchas opciones que van más allá de lo que te ofrece scrollIntoView nativo . Por ejemplo, puede configurar el desplazamiento para que sea suave y luego establecer una devolución de llamada para cuando finalice el desplazamiento.
También puede echar un vistazo a todos los complementos de JQuery etiquetados con "scroll" .
fuente
Aquí hay un complemento rápido de jQuery para mapear muy bien la funcionalidad integrada del navegador:
fuente
Después de la prueba y error, se me ocurrió esta función, también funciona con iframe.
fuente
Solo un consejo. Funciona solo en firefox
Element.scrollIntoView ();
fuente
Mi interfaz de usuario tiene una lista de desplazamiento vertical de los pulgares dentro de una barra de pulgar. El objetivo era hacer que el pulgar actual estuviera justo en el centro de la barra de pulgar. Partí de la respuesta aprobada, pero descubrí que había algunos ajustes para centrar verdaderamente el pulgar actual. Espero que esto ayude a alguien más.
margen:
jquery:
fuente
Sencillos 2 pasos para desplazarse hacia abajo hasta el final o hacia abajo.
Paso 1: obtenga la altura completa de la división desplazable (conversación).
Paso 2: aplique scrollTop en ese div desplazable (conversación) utilizando el valor obtenido en el paso 1.
Los pasos anteriores deben aplicarse para cada anexo en el div de conversación.
fuente
Después de tratar de encontrar una solución que manejara todas las circunstancias (opciones para animar el desplazamiento, rellenar el objeto una vez que se desplaza a la vista, funciona incluso en circunstancias oscuras como en un iframe), finalmente terminé escribiendo mi propia solución para esto. Como parece funcionar cuando muchas otras soluciones fallan, pensé en compartirlo:
$target
es un objeto jQuery que contiene el objeto que desea desplazar a la vista si es necesario.options
(opcional) puede contener las siguientes opciones pasadas en un objeto:options.$container
- un objeto jQuery que apunta al elemento contenedor de $ target (en otras palabras, el elemento en el dom con las barras de desplazamiento). El valor predeterminado es la ventana que contiene el elemento $ target y es lo suficientemente inteligente como para seleccionar una ventana de iframe. Recuerde incluir los $ en el nombre de la propiedad.options.padding
- el relleno en píxeles para agregar encima o debajo del objeto cuando se desplaza a la vista. De esta manera, no está justo contra el borde de la ventana. El valor predeterminado es 20.options.instant
- si se establece en verdadero, jQuery animate no se usará y el desplazamiento aparecerá instantáneamente en la ubicación correcta. Por defecto es falso.options.animationOptions
- cualquier opción jQuery que desee pasar a la función animada jQuery (consulte http://api.jquery.com/animate/ ). Con esto, puede cambiar la duración de la animación o ejecutar una función de devolución de llamada cuando se completa el desplazamiento. Esto solo funciona sioptions.instant
se establece en falso. Si necesita tener una animación instantánea pero con una devolución de llamada, configure enoptions.animationOptions.duration = 0
lugar de usaroptions.instant = true
.fuente