Estoy buscando una animación simple de "desplazamiento hacia arriba" en el navegador que pueda aplicar a un enlace. No quiero requerir una biblioteca JS como jQuery / Moo, etc.
// jQuery Equivilant to convert to pure JS...
$('html, body').animate({scrollTop:0}, 400);
Soy un caso perfecto para alguien que debería haber aprendido JS 100% antes de saltar a una biblioteca. :(
javascript
Heather Hins
fuente
fuente
var something = $(...)
), recreando miles de millones de objetos en cada función (conocen variables, pero no lo sabenvar veryBigObject = {...}
con unos pocos cientos de propiedades en la parte superior de la función va a asesinar el rendimiento). Y muy a menudo ni siquiera saben que el nombre del idioma es Javascript, no jQuery.Respuestas:
Manifestación:
fuente
document.documentElement
en lugar dedocument.body
(a menos que establezca CSS:)body{height:100%;}
. Demostración de trabajo utilizando este concepto: jsfiddle.net/S5ALP/1if (duration <= 0) return;
top.window.scroll(0, value)
lugar deelement.scrollTop = value
hacerlo funcionar en Chrome y Firefox (Ubuntu). :)Parece que ya hay muchas soluciones. de todos modos, aquí hay otro, usa ecuaciones de relajación.
fuente
requestAnimationFrame
requestAnimationFrame
no es compatible con todos los navegadores solo algunos móviles, por lo que no es una solución dinámica, consulte: developer.mozilla.org/en-US/docs/Web/API/window/…requestAnimationFrame
que debería encargarse de cualquier incompatibilidad del navegadorLo obtuve de un artículo sobre Smooth Scrolling .
Si es necesario, hay algunos polyfills disponibles.
fuente
scrollIntoView({behavior: 'smooth'})
existe, y que puedo hacer lo que la gente necesita para este tipo de problema.Uncaught TypeError: Failed to execute 'scroll' on 'Window': No function was found that matched the signature provided.
Modifiqué la respuesta de TimWolla para usar la aceleración de entrada y salida cuadrática (un poco más suave :). Aquí hay un ejemplo en acción: en jsFiddle . Las funciones de aceleración están disponibles aquí: Funciones de aceleración de Robert Penner
fuente
document. documentElement
no funciona en Chrome.Sin el código JQuery, espero que esto te ayude.
llame a esta función TopscrollTo () en el evento de clic del botón o en cualquier otro elemento / evento que desee.
fuente
Modifiqué el código de @TimWolla para agregar más opciones y algunas funciones de movimiento. Además, se agregó soporte para crossbrowser con document.body.scrollTop y document.documentElement.scrollTop
http://jsfiddle.net/forestrf/tPQSv/
Versión minificada: http://jsfiddle.net/forestrf/tPQSv/139/
fuente
1 / duration
cuando llamas a scrollToX por primera vez?En realidad, hay una forma pura de JavaScript para lograr esto sin usar
setTimeout
orequestAnimationFrame
o jQuery.En resumen, encuentre el elemento en scrollView al que desea desplazarse y use scrollIntoView
el.scrollIntoView({behavior:"smooth"});
Aquí hay un plunkr .
fuente
scrollIntoViewOption
no tiene soporte para navegadores cruzados. developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewAdaptado de esta respuesta :
Esto debería permitirle desplazarse suavemente (función coseno) desde cualquier lugar a la "y" especificada.
fuente
Nadie mencionó la propiedad CSS comportamiento de desplazamiento de la
CSS
JS
fuente
CLASE DE PASEO JAVASCRIPT PURO
Esta es una vieja pregunta, pero pensé que podría responder con algunas cosas elegantes y algunas opciones más para jugar si quieres tener un poco más de control sobre la animación.
Aquí es una clase JS pura para encargarse del desplazamiento por usted:
VER DEMO EN CODEPEN O IR A LA PARTE INFERIOR Y EJECUTAR EL SINPET
GUIÓN DE CLASE COMPLETA + EJEMPLO DE USO:
fuente
Fácil.
fuente
window.scrollTo(x, y);
..scrollTop
y.scrollLeft
.*scroll
al calcular la posición del desplazamiento. Sin embargo, no veo ninguna falta;
...Acabo de hacer esta solución de javascript solo a continuación.
Uso simple:
Objeto del motor (puede jugar con el filtro, valores fps):
fuente
console.warn
Y el parámetro de cadenasetTimeout
no es adecuado en el código de producción (la segunda es bastante inadecuada) en cualquier lugar, ya que eseval
básicamente).Basándose en algunas de las respuestas aquí, pero usando algunas matemáticas simples para una transición suave usando una curva sinusoidal:
Uso:
PD. tomar nota del estilo ES6
fuente
Este es un enfoque de navegador cruzado basado en las respuestas anteriores
fuente
difference
yperTick
?Otro enfoque es usar window.scrollBy
JSFiddle
fuente
Elegí la versión @akai de la respuesta @timwolla y agregué la función stopAnimation a cambio, así que antes de comenzar una nueva animación, se puede detener la anterior.
fuente
Otro enfoque de navegador cruzado basado en la solución anterior
El truco es controlar el cambio de desplazamiento real y, si es cero, cambiar el elemento de desplazamiento.
fuente
Animación de desplazamiento lineal hacia abajo. JS puro, no JQuery. Quizás mi solución sea útil para alguien.
Puede cambiar las variables
action_count
,speed_ms
para configurar la animación de desplazamiento de su gusto.fuente
Usa esta solución
Gracias
fuente
animate()
función en el alcance de la ventana ... Creo que lo malinterpretas. LaElement.animate()
función no es reconocida por muchos navegadores. Ver developer.mozilla.org/en-US/docs/Web/API/Element/animateVeo que la mayoría / todas las publicaciones anteriores buscan un botón con javascript. Esto funciona, siempre que solo tenga un botón. Recomendaría definir un elemento "onclick" dentro del botón. Ese "onclick" luego llamaría a la función causando que se desplazara.
Si lo hace así, puede usar más de un botón, siempre que el botón se vea así:
fuente