2009-05-07 19 views
90

Estoy intentando desplazarme hacia abajo 100px cada vez que el usuario se acerca al principio del documento.

Tengo la función ejecutándose cuando el usuario se acerca al principio del documento, pero la función .scrollTo no funciona.

puse una alerta antes y después de comprobar para ver si realmente era la línea o no que se detenía y sólo la primera alerta se apaga, aquí está el código:

alert("starting"); 
$.scrollTo({ top: '+=100px', left: '+=0px' }, 800); 
alert("finished"); 

sé que tengo la página jquery se vinculó correctamente porque estoy usando muchas otras funciones jquery y todas funcionan bien. También intenté eliminar el 'px' de arriba y no parece marcar la diferencia.

+3

Jquery en sí mismo puede funcionar bien, pero ¿está seguro de que tiene el complemento scrollTo vinculado correctamente? Cambie una de esas alertas para alertar ($. ScrollTo); – Andrew

Respuesta

93

Si no funciona, ¿por qué no intentas usar el método scrollTop de jQuery?

$("#id").scrollTop($("#id").scrollTop() + 100); 

Si usted está buscando para desplazarse sin problemas se puede usar javascript función básica setTimeout/setInterval para que sea desplazarse en incrementos de 1 píxel durante un período de tiempo determinado.

+3

ScrollTop funciona mucho mejor en IE también. –

+6

Tenga en cuenta que si desea desplazar toda la página y no el elemento individual, use $ ('html, body') igual que [Tim] (http://stackoverflow.com/users/181971) ha señalado aquí. Solo $ ('cuerpo') no funcionará en todos los navegadores. –

7

Parece que tienes la sintaxis un poco equivocada ... Supongo que, basado en tu código, estás intentando desplazarte hacia abajo 100px en 800ms, si es así, esto funciona (usando scrollTo 1.4.1):

$.scrollTo('+=100px', 800, { axis:'y' }); 
40

jQuery ahora es compatible con scrollTop como una variable de animación.

$("#id").animate({"scrollTop": $("#id").scrollTop() + 100}); 

Ya no es necesario configurar el tiempo de espera/setInterval para desplazarse sin problemas.

+0

Tiene algunos errores de sintaxis, falta su cierre {. De lo contrario, este es un buen punto. – Joshua

+1

¿Debería ser '$ (" # id "). Offset(). Top' en su lugar? – codeulike

302
$('html, body').animate({scrollTop: $("#page").offset().top}, 2000); 
+4

+1 para esto, muy suave. – shmeeps

+0

Bastante impresionante, ¡gracias! –

+18

A menudo me he preguntado por qué las personas usan 'html, body' para scrollTop en lugar de simplemente 'html'. Tiene alguna idea sobre esto? –

6

realidad algo así como

function scrollTo(prop){ 
    $('html,body').animate({scrollTop: $("#"+prop).offset().top + 
parseInt($("#"+prop).css('padding-top'),10) },'slow'); 
} 

va a funcionar muy bien y el acolchado de apoyo. También puede apoyar márgenes fácil - para la terminación ver más abajo

function scrollTo(prop){ 
    $('html,body').animate({scrollTop: $("#"+prop).offset().top 
+ parseInt($("#"+prop).css('padding-top'),10) 
+ parseInt($("#"+prop).css('margin-top'),10) +},'slow'); 
} 
12

para moverse por la cuestión html vs body, me fijo esto no anima el css directamente sino más bien llamar window.scrollTo(); en cada paso:

$({myScrollTop:window.pageYOffset}).animate({myScrollTop:300}, { 
    duration: 600, 
    easing: 'swing', 
    step: function(val) { 
    window.scrollTo(0, val); 
    } 
}); 

Esto funciona bien sin ningún tipo de inconvenientes de actualización, ya que usa JavaScript entre varios navegadores.

Eche un vistazo a http://james.padolsey.com/javascript/fun-with-jquerys-animate/ para obtener más información sobre lo que puede hacer con la función animada de jQuery.

+1

Esto es brillante. Solo cambié 'window.pageYOffset' a' $ (ventana) .scrollTop() 'y' window.scrollTo (0, val) 'a' $ (ventana) .scrollTop (val) ', así que no tengo que preocuparme sobre la compatibilidad del navegador. – leftclickben

+1

Nunca pensé pasar un objeto al método animado de jQuery así. Tantos usos posibles. Esta solución es genial, gracias. – Synexis

+0

Esto realmente necesita más votos positivos, es fantástico. – degenerate

Cuestiones relacionadas