¿ scrollIntoView()
Funciona en todos los navegadores? Si no, ¿hay una jQuery
alternativa?
Respuestas:
Como señaló @ 9bits, desde hace mucho tiempo todos los navegadores principales lo admiten . No te preocupes por eso. El principal problema es la forma en que funciona. Simplemente salta a un elemento en particular que también puede estar al final de la página. Al saltar a él, los usuarios no tienen idea de si:
Los dos primeros se pueden determinar por la posición de desplazamiento, pero ¿quién dice que los usuarios mantuvieron un registro de la posición de desplazamiento antes de realizar el salto? Entonces es una acción no determinista.
El último puede ser cierto, especialmente si la página tiene un encabezado en movimiento que se desplaza fuera de la vista y el diseño de la página restante no implica nada al estar en la misma página (si tampoco tiene ningún elemento vertical de altura total como el menú izquierdo bar). Te sorprendería saber cuántas páginas tienen este problema. solo compruébalos tú mismo. Ve a alguna página, mírala en la parte superior, luego presiona la Endtecla y mírala nuevamente. Es probable que piense que es una página diferente.
scrollintoview
jQuery animado al rescateEs por eso que todavía hay complementos que realizan el desplazamiento a la vista en lugar de usar la función DOM nativa. Por lo general, animan el desplazamiento, lo que elimina los 3 problemas descritos anteriormente. Los usuarios pueden realizar un seguimiento del movimiento fácilmente.
ScrollIntoViewOptions
permite especificar behavior: 'smooth'
. desafortunadamente, no hay forma de detectar fácilmente si esta opción es compatible con un navegador…
behavior: "smooth"
, pero no Chrome ni Safari.
Parece que sí: http://www.quirksmode.org/dom/w3c_cssom.html
Utilizo iScroll-4 de Matteo Spinnelli y también funciona en iOS Safari. Tiene tres métodos scrollTo, scrollToElement y scrollToPage. Digamos que tiene una lista desordenada de elementos dentro de un div. Como ha escrito Robert Koritnik anteriormente, debe tener esa pequeña animación para mostrar que se ha desplazado. El siguiente método logra ese efecto.
scrollToElement(element, time);
No he intentado esto, pero parece que llevar a cuestas la función scrollIntoView incorporada ahorraría mucho código. Esto es lo que haría si quisiera acción animada: