2012-05-01 10 views
6

Estoy haciendo un sitio de una página que tiene una navegación clásica en la parte superior. Ahora mismo tengo vínculos creados como etiquetas de hash para navegar dentro de la página:Efecto simple "desplazarse hacia abajo" usando marcas de marcado y hash mínimas

<nav> 
<a href="#about">About</a> 
</nav> 
... 
<section id="about">...</section> 

Obviamente, esto funciona, pero el salto a la sección acerca es instantánea y no gradual. Estoy buscando una implementación extremadamente simple para hacer una transición gradual. No quiero nada lujoso. Sin eje, desplazamiento o cualquier otra opción. Solo quiero que la transición de desplazamiento sea gradual. La única configuración que quiero es el tiempo que toma terminar el desplazamiento. Además, quiero hacer casi ningún cambio en mi marcado. He visto varios plugins de JavaScript que requieren el uso de etiquetas de anclaje para establecer las ubicaciones en el documento html. No quiero eso. This site parece prometedor, pero no sé cómo configurarlo. No hay demo, así que no puedo ver cómo configurarlo. No soy tan alfabetizado en Javascript. Además, el ScrollTo plugin para jQuery es demasiado complicado. Estoy dispuesto a usar un complemento que tenga muchas opciones, pero simplemente no quiero que las opciones me impidan descubrir cómo configurarlo.

¡Cualquier ayuda sería muy apreciada!

Respuesta

16

Ésta es la mejor manera que he encontrado para hacerlo - sólo utiliza los anclajes normales sino que se extiende su funcionalidad

$('a').click(function() { 
    var elementClicked = $(this).attr("href"); 
    var destination = $(elementClicked).offset().top; 
    $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination-15}, 500); 
}); 

Aquí está una live example

+0

¿Cómo se vería el marcado HTML y cómo lo implementaría? – davecave

+0

Vea este ejemplo http://jsfiddle.net/jackdent/Z8XDG/ – jacktheripper

+0

Eso es perfecto, excepto que parece que no puedo replicar el efecto en mi sitio usando el javascript en el violín. Estoy seguro de que es un pequeño error de mi parte. ¿Cómo escribo en el javascript usando onLoad? ¿Lo pongo en el encabezado? sitio de prueba: http: //test.davewhitley.com/not-wp/kate/ – davecave

6

He utilizado jquery para hacer esto.

que tenían un vínculo como tal ->

<a href="1" class="scrolling">Go to 1</a> 

a continuación, utilizando jQuery sería desplazarse hacia abajo para un div con otro anclaje con id "1"

$("a.scrolling").click(function(e) { 
    e.preventDefault(); 
    goToByScroll($(this).attr("href")); 
}); 

function goToByScroll(id) { 
    $('html,body').animate({scrollTop: $("#"+id).offset().top},'slow');        
}      
+1

+1 pero si está utilizando jQuery, adjunte los eventos correctamente. Usar el atributo 'onclick' hace que mi piel se arrastre. –

+0

Por supuesto, permítame actualizar mi respuesta :) – Undefined

+0

Preferiría no usar etiquetas de anclaje para establecer las ubicaciones finales. – davecave

0

He encontrado este código a través de Internet mientras busca una forma rápida de crear este desplazamiento para que tenga efecto.

código html:

<a href="#services">Jump to services</a> 
<div id="services"></div> 

jQuery código:

$(document).ready(function(){ 
$('a[href^="#"]').on('click',function (e) { 
    e.preventDefault(); 

    var target = this.hash, 
    $target = $(target); 

    $('html, body').stop().animate({ 
     'scrollTop': $target.offset().top 
    }, 900, 'swing', function() { 
     window.location.hash = target; 
    }); 
}); 

});

Este es el Code source.

Cuestiones relacionadas