2011-07-13 12 views
102

Im Tring para animar el desplazamiento para una identificación particular, al cargar la página. He hecho un montón de investigación y me encontré con esto:Animate desplazamiento para ID en la página de carga

$("html, body").animate({ scrollTop: $('#title1').height() }, 1000); 

pero esto parece comenzar a partir del ID y animar a la parte superior de la página?

El HTML (que está a medio camino abajo de la página) es simplemente:

<h2 id="title1">Title here</h2> 
+1

esto no es mucho de una respuesta, pero lo recomiendo altamente plug-in "scrollTo" de Ariel Flesler; que tiene un montón de características para la expansión de una página, y un par de extensiones para el plug-in para los casos comunes (por ejemplo, usted podría encontrar a su plug-in "LocalScroll" útil para desplazarse a href de un enlace si está en la misma página). Puede obtener el plugin aquí: http://flesler.blogspot.com/2007/10/jqueryscrollto.html – Faisal

+0

El PO es viejo, pero voy a compartir este post para otros procedentes de SE. Aquí está un artículo que comparten una función simple para resolver el problema: http://smartik.ws/2015/01/super-simple-animate-scroll-to-id-using-jquery/ –

Respuesta

276

Sólo se está desplazando la altura de su elemento. offset() devuelve las coordenadas de un elemento con respecto al documento, y top parámetro le dará la distancia a del elemento en píxeles a lo largo del eje y:

$("html, body").animate({ scrollTop: $('#title1').offset().top }, 1000); 

y también se puede añadir un retardo a la misma:

$("html, body").delay(2000).animate({scrollTop: $('#title1').offset().top }, 2000); 
+1

¿Qué es lo que hace que el desplazamiento automático voy "WOW COOL !!" Quizás es la simplicidad de tu solución. – theblang

+0

Necesitaba desplazar un elemento a la vista en la carga de la página, pero tenía dos problemas: a) al usar "html, cuerpo" recibí dos retrollamadas (una para cada elemento coincidente). b) Depende del navegador que funcione con body o html. Así que hice una idea básica que puedes adaptar para usarla en tu proyecto para asegurar que scroll-in-view funcione en "cualquier" navegador y que solo recibirás una devolución de llamada cuando termine la animación. https: //gist.github.com/netsi1964/4ddffe1ae14e05220d25 – Netsi1964

+1

Esto no es realmente correcto. Realmente debería considerar la posición de desplazamiento actual del cuerpo o elemento que estamos tratando de "desplazar". Con esto en mente, agregaría la posición de desplazamiento actual del 'cuerpo' a la posición' offset(). Top' del elemento que queremos ver, la suma resultante es el valor que queremos desplazar a. $ (' html, body '). animate ({scrollTop: ($ (' html, body '). scrollTop() + $ (' # title1 '). offset(). arriba)}, 1000); ' – magreenberg

3

Hay un complemento jquery para esto. Desplaza el documento a un elemento específico para que quede perfectamente en el medio de la ventana gráfica. También es compatible con animaciones de animación para que el efecto de desplazamiento se vea súper suave. Compruebe this link.

En su caso el código es

$("#title1").animatedScroll({easing: "easeOutExpo"}); 
+0

"También es compatible con animaciones de animación para que el efecto de desplazamiento se vea súper suave" Desafortunadamente, eso no es cierto. Si la computadora es lenta por alguna razón, simplemente sigue saltando sin moverse realmente. – brunoais

+0

El desplazamiento suave requiere que se calculen muchos píxeles. Claro, una "computadora" lenta (más GPU) no puede hacer esto, pero debido a la falta de suficientes ALU. Por lo general, él tiene razón. Y muy fácil de desplazamiento lib. – Roland

1

tratan con código siguiente. hacen que los elementos con nombre de la clase página- desplazarse y mantener el nombre id para href de enlaces correspondientes

$('a.page-scroll').bind('click', function(event) { 
     var $anchor = $(this); 
     $('html, body').stop().animate({ 
      scrollTop: ($($anchor.attr('href')).offset().top - 50) 
     }, 1250, 'easeInOutExpo'); 
     event.preventDefault(); 
    }); 
4

solución javascript puro con scrollIntoView() función:

document.getElementById('title1').scrollIntoView({block: 'start', behavior: 'smooth'});
<h2 id="title1">Some title</h2>

P. S. El parámetro "suave" ahora funciona desde Chrome 61 como julien_c mencionado en los comentarios.

+1

Funciona ahora (desde Chrome 61) –

Cuestiones relacionadas