Desplazamiento animado en anclas de enlaces con jQuery
Escrito el 26 mayo, 2010 por Verónica Milán
Estaba buscando para un proyecto en el que estoy trabajando la manera de hacer desplazamientos dentro de la página de una forma menos brusca a la que brinda el html.
Como sabréis, se pueden crear enlaces que apunten a zonas concretas dentro de la misma página con el elemento href=#. Esto es útil por ejemplo, cuando la página tiene mucho contenido y por tanto mucho scroll vertical, para poner ayudas al usuario y llevarle a zonas importanes de la página con los típicos enlaces de “saltar a contenido”.
Esto se puede hacer con HTML básico de esta manera:
Creas el enlace ancla que va a llevar a otra parte de la página:
<a href="#ancla">Ancla</a>
Creas el id para la zona de la página a donde quieres que lleve el ancla:
<div id="ancla"> ... contenido </div>
El funcionamiento es perfecto, lo que no me gusta es el modo de hacerlo que tiene el HTML, ya que provoca un salto brusco.
Bueno, para hacerlo de forma suavizada, tal y como se muestra en este ejemplo, se consigue poniendo este código JavaScript (jQuery) en el head de tu web o en un archivo externo .js:
$(function(){
$('a[href*=#]').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'')
&& location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
if ($target.length) {
var targetOffset = $target.offset().top;
$('html,body').animate({scrollTop: targetOffset}, 1000);
return false;
}
}
});
});
Voilá, con este pequeño código en jQuery nada intrusivo se consigue un bonito efecto para tus desplazamientos de página.
Particularmente pienso que este pequeño detalle ayuda a mejorar la usabilidad de este tipo de enlaces, que son poco usables por concepto, precisamente por cosas como las que el propio Nielsen publicó hace años sobre el tema:
Según Nielsen, hay que evitar el uso de enlaces de ancla dentro de las páginas por la sencilla razón de que el usuario tiene un modelo mental bien definido acerca del comportamiento de los enlaces, de forma que cuando pincha en un link espera ser dirigido a una página web distinta de la que está visitando. Los enlaces de ancla violan ese modelo mental al enlazar a zonas dentro de una misma página, lo que puede confundir al usuario.
Con este efecto en jQuery queda más clara la acción del enlace, puesto que en todo momento ves lo que está pasando al notar el desplazamiento, mientras que con html el cambio es tan brusco que parece que te has teletransportado a otro sitio (con perdón de la forma de explicarlo).
Visto en: smashingmagazine
EDITO: releyendo el post veo que no he puesto en ningún sitio que hay que cargar jQuery para hacerlo funcionar… Lo he dado por entendido al tratarse de un script en jQuery, pero por si alguien no se había dado cuenta, en el de la web donde vaya este código, hay que cargar jQuery. Yo lo suelo cargar del cdn de Google para evitar usar recursos de mi servidor, con esta línea:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>
|
Artículos Relacionados Hacer Tabs (pestañas) con jQuery y CSS Hoy he publicado en la sección de artículos de LaWebera.es un tutorial donde explico como... Ver enlaces (links) rotos Hay muchas aplicaciones en Internet para comprobar los links rotos de tu web, entre ellas... ¿Enlaces o contenido? que es más importante en el SEO Hace unos meses leí un artículo publicado en el segundo número de la revista de... Reportes de posicionamiento y popularidad web UrlTrends es una herramienta que te ofrece reportes sobre la popularidad de tu web medida... |
Publicado en jQuery | 16 Comentarios
16 Comentarios para “Desplazamiento animado en anclas de enlaces con jQuery”
Enlaces a esta entrada



Quiero felicitarte, por este gran blog, en realidad lo conozco hace poco, pero he leído varios artículos y la verdad me han parecido muy interesantes, te seguire leyendo.
Un abrazo.
1/06/10 - 16:23 #
Gracias por las felicitaciones
siempre es agradable saber que lo que escribes sirve a otras personas.
Saludos.
9/06/10 - 22:12 #
Hola,
primero que nada muchas gracias por tu blog que es de gran ayuda para las aprendices como yo, que se muy poco de codigo pero que quiero aprender.
Quiero usar este efecto de desplazamiento entre las anclas de la misma página, en un blog que estoy haciendo, pero no se bien donde pegar el código … intenté en el documento del header pero no me funcionó.
Estoy trabajando con wordpress. si pudieras ayudarme, gracias
10/06/10 - 12:44 #
estimado, alguna forma de incorporar el efecto suavizado del ancla en Blogger?
saludos.
10/07/10 - 19:35 #
Shaki,
Para que te funcione tienes que crear un ancla de enlace en html, como se especifica al principio del post, y añadirle a la página el código javascript que hay al final de este post.
Czv, si puedes editar tu blog en blogger, podrás incorporarlo como en cualquier otro sitio, pero sino puedes modificar las páginas no.
Saludos.
14/07/10 - 10:49 #
Hola, los enlaces normales funciona perfectamente, pero he hecho lo mismo con una imagen y delimitando zonas interactivas en ella mediante map y no funciona. ¿Alguna idea?
Gracias
18/10/10 - 12:50 #
Gracias loco!!! me funcionó!!! está barbaro!!! Sos Groso sabelo!!!
26/10/10 - 21:31 #
Gracias por el recurso, justo lo que estaba buscando, pero aun siento que esta un tanto rápido, asumo que se puede hacer mas lento en la configuración de los 1000 verdad?
de cualquier manera gran recurso, siempre pensé en algo así para las anclas.
Saludos
19/11/10 - 4:59 #
Así es vlad, cámbialo a tu gusto.
Saludos!
23/11/10 - 10:21 #
Estoy intentando implementarlo en un nuevo proyecto pero no le veo por donde, no hay incompatibilidad con las versiones de jQuery recientes?
18/05/11 - 22:21 #
Que yo sepa no Manuel
19/05/11 - 23:48 #
hola. Antes que nada, felicidades y mil gracias. Es excelente este código.
Sólo un pequeño problema. ¿lo has probado con ópera?
es que es el único navegador donde no me funciona. ¿alguna idea? ¿acaso será algo que sólo me pase a mi?
Te lo agradeceré infinitamente.
13/10/11 - 0:33 #
Hey!! excelente post!!
lo he utilizado y keda perfecto.. solo q tengo la misma duda que mauricio (arriba); no me funciona en opera.. que puedo hacer? o como se hace el “parche”?
Gracias!
8/11/11 - 18:09 #
muy buenas, primero que nada felicitarte por tu blog, despues de tanto googlear he encontrado tu site, el code va perfecto, pero tengo una preguntilla, es posible usar este efecto cambiando entre diferentes paginas? no solo en anclajes de la misma?
17/11/11 - 21:42 #
Muchas gracias! no sabía cómo buscar ese efecto, desplazamiento scroll era el concepto que andaba buscando. Queda perfecto! felicitaciones y gracias nuevamente
30/11/11 - 17:05 #