¿Hay alguna manera de controlar el desplazamiento del navegador con JavaScript / jQuery?
Cuando desplazo mi página hasta la mitad, luego acciono una recarga, quiero que la página vaya a la parte superior, pero en su lugar trata de encontrar la última posición de desplazamiento. Entonces hice esto:
$('document').ready(function() {
$(window).scrollTop(0);
});
Pero sin suerte.
EDITAR :
Así que ambas respuestas funcionaron cuando las llamo después de que se carga la página. Gracias. Sin embargo, si solo actualizo la página, parece que el navegador calcula y se desplaza a su posición de desplazamiento anterior DESPUÉS del .ready
evento (también probé la función onload () del cuerpo).
Entonces, el seguimiento es, ¿hay alguna manera de PREVENIR que el navegador se desplace a su posición anterior o volver a desplazarse a la parte superior DESPUÉS de que haga lo suyo?
fuente
Respuestas:
Wow, llego 9 años tarde a esta pregunta. Aqui tienes:
Agregue este código a su carga.
history.scrollRestoration Soporte del navegador:
Chrome: compatible (desde 46)
Firefox: compatible (desde 46)
IE / Edge: no compatible (aún ..)
Opera: compatible (desde 33)
Safari: compatible
Para IE / Edge si desea volver a desplazarse hacia la parte superior DESPUÉS de que se desplaza automáticamente hacia abajo, esto funcionó para mí:
fuente
Cross-browser, solución pura de JavaScript:
fuente
$(window).one("scroll",function() { /* the code from my answer here */ });
Usted casi lo consiguió - que necesita para establecer el
scrollTop
sobrebody
, nowindow
:EDITAR:
Tal vez pueda agregar un ancla en blanco en la parte superior de la página:
fuente
'html','body'
ya que los navegadores modernos se desplazarán según el cuerpo, pero IE8 y abajo solo se desplazarán con 'html', 'cuerpo'La siguiente solución jquery funciona para mí:
fuente
Aquí hay una versión de desplazamiento animado JavaScript puro para no-jQuery'ers: D
Y entonces:
fuente
requestAnimationStep
lugar desetTimeout
. Además, no responde la pregunta de OP.ACTUALIZAR
Ir a la parte superior de la página con un efecto de desplazamiento es un poco más fácil en JavaScript ahora con:
https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll
PRECAUCIÓN
Hemos estado usando esto en nuestros proyectos más recientes, pero acabo de revisar el documento de Mozilla en este momento mientras actualizo mi respuesta y creo que se ha actualizado. En este momento el método es
window.scroll(x-coord, y-coord)
y no menciona ni muestra ejemplos que utilizan elobject
parámetro donde se puede establecer elbehavior
asmooth
. Acabo de probar el código y todavía funciona en Chrome y Firefox y el parámetro objeto todavía está en la especificación .Así que use esto con precaución o puede usar este Polyfill . Aparte de desplazarse a la parte superior, esta polyfill también se ocupa de otros métodos:
window.scrollBy
,element.scrollIntoView
, etc.ANTIGUA RESPUESTA
Esta es nuestra
javascript
implementación de vainilla . Tiene un efecto de alivio simple para que el usuario no se sorprenda después de hacer clic en el botón Arriba .Es muy pequeño y se vuelve aún más pequeño cuando se minifica. Los desarrolladores que buscan una alternativa al método jquery pero quieren los mismos resultados pueden intentarlo.
JS
HTML
¡Salud!
fuente
Esto funciona para mi:
Utiliza un corto
setTimeout
dentro delonload
para dar al navegador la oportunidad de hacer el desplazamiento.fuente
Puedes usar con jQuery
fuente
Use la siguiente función
Aquí se requiere xpos. La coordenada para desplazarse, a lo largo del eje x (horizontal), en píxeles
Ypos también es obligatorio. La coordenada para desplazarse, a lo largo del eje y (vertical), en píxeles
fuente
Utilizar este
fuente
El siguiente código funciona en Firefox, Chrome y Safari , pero no pude probar esto en Internet Explorer. ¿Alguien puede probarlo y luego editar mi respuesta o comentarlo?
fuente
Mi solución Javascript pura (animada):
Explicación:
window.scrollY
es una variable mantenida por el navegador de la cantidad de píxeles desde la parte superior por la que se ha desplazado la ventana.window.scrollTo(x,y)
es una función que desplaza la ventana una cantidad específica de píxeles en el eje xy en el eje y.Por lo tanto,
window.scrollTo(0,window.scrollY-20)
mueve la página 20 píxeles hacia la parte superior.El
setTimeout
llama a la función de nuevo en 10 milisegundos para que entonces podemos moverlo otros 20 pixeles (animados), y losif
controles de los estados si todavía tenga que desplazarse.fuente
¿Por qué no usas algún elemento de referencia al principio de tu archivo html, como
y luego, cuando se carga la página, simplemente haz
Si el navegador se desplaza después de que se active esta función, simplemente haga
fuente
Desplazamiento entre navegadores hacia arriba:
Desplazamiento entre navegadores a un elemento con id = div_id:
fuente
Para responder a su pregunta editada, puede registrar el
onscroll
controlador de la siguiente manera:Esto hará que el primer intento de desplazamiento (que probablemente sea el automático realizado por el navegador) se cancele efectivamente.
fuente
Si estás en modo peculiar (gracias @Niet the Dark Absol):
Si estás en modo estricto:
No hay necesidad de jQuery aquí.
fuente
Esto esta funcionando:
fuente
En mi caso el cuerpo no funcionó:
Pero HTML funcionó:
fuente
'html','body'
como los navegadores modernos FF, Chrome se desplazará según el cuerpo, pero IE8 y debajo solo se desplazarán con'html','body'
La combinación de estos dos me ayudó. Ninguna de las otras respuestas me ayudó, ya que tenía un sidenav que no se desplazaba.
fuente
fuente
sin animación, solo
scroll(0, 0)
(vanilla JS)fuente
Si alguien está usando un diseño angular y material con sidenav. Esto lo enviará a la parte superior de la página:
fuente
Seeint el hash debería hacer el trabajo. Si tiene un encabezado, puede usar
de lo contrario, el # solo funcionará
Y a medida que se escribe en la URL, se mantendrá si actualiza.
De hecho, el evento no necesita JavaScript para eso si desea hacerlo en un evento onclick, simplemente debe poner un enlace alrededor de su elemento y darle # como href.
fuente
Primero agregue una etiqueta de anclaje en blanco al lugar donde desea ir
Ahora agregue una función en la sección de encabezado
finalmente agregue un evento de carga a la etiqueta del cuerpo
fuente
Una versión genérica que funciona para cualquier valor X e Y, y es igual que la api window.scrollTo, solo con la adición de scrollDuration.
* Una versión genérica que coincide con la API del navegador window.scrollTo **
fuente
Recuerdo haber visto esto publicado en otro lugar (no pude encontrar dónde), pero esto funciona muy bien:
Es extraño, pero la forma en que funciona se basa en la forma en que funciona la cola de pila de JavaScript. La explicación completa se encuentra aquí en la sección Cero retrasos.
La idea básica es que el tiempo
setTimeout
no especifica realmente la cantidad de tiempo establecida que esperará, sino la cantidad mínima de tiempo que esperará. Entonces, cuando le dice que espere 0 ms, el navegador ejecuta todos los demás procesos en cola (como desplazar la ventana al lugar donde estuvo por última vez) y luego ejecuta la devolución de llamada.fuente
fuente