Pergunta

Eu estou tentando de rolagem para baixo 100px cada vez que o usuário recebe perto da parte superior do documento.

Eu tenho a função de execução quando o utilizador se aproxima do topo do documento, mas a função .scrollTo não está funcionando.

Eu coloquei um alerta depois e antes de verificar para ver se ele realmente foi a linha ou não que estava parando-o e apenas o primeiro alerta dispara, aqui está o código:

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

Eu sei que tenho a página jquery ligados corretamente porque eu estou usando muitas outras funções jQuery todo e todos eles funcionam bem. Eu também tentei remover o 'px' de cima e não parece fazer a diferença.

Foi útil?

Solução

Se ele não está funcionando por que você não tente usar método scrollTop do jQuery?

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

Se você está procurando para se deslocar sem problemas você poderia usar básico javascript setTimeout / setInterval função para fazê-lo rolar em incrementos de 1 pixel ao longo de um determinado período de tempo.

Outras dicas

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

jQuery agora suporta scrollTop como uma variável de animação.

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

Você não precisa mais setTimeout / setInterval para rolar sem problemas.

Para contornar a html vs questão body, eu reparei isso não animar o css diretamente, mas sim chamar window.scrollTo(); em cada etapa:

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

Isso funciona muito bem sem quaisquer truques de atualização, uma vez que está a usar cross-browser JavaScript.

Tenha um olhar em http://james.padolsey.com/javascript / fun-with-jquerys-animado / para obter mais informações sobre o que você pode fazer com a função de animar jQuery.

Parece que você tem a sintaxe ligeiramente errado ... Estou assumindo com base no seu código que você está tentando rolar para baixo 100px em 800ms, se assim for, então isso funciona (usando scrollTo 1.4.1):

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

Na verdade algo como

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

vai funcionar muito bem e apoiar estofamento. Você também pode apoiar margens facilmente - para a conclusão veja abaixo

function scrollTo(prop){
    $('html,body').animate({scrollTop: $("#"+prop).offset().top 
+ parseInt($("#"+prop).css('padding-top'),10) 
+ parseInt($("#"+prop).css('margin-top'),10) +},'slow');
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top