Eu quero rolar suavemente para baixo. Eu não quero ter que escrever uma função para isso - especialmente se o jQuery já tiver uma.
javascript
jquery
Bryan Field
fonte
fonte
html
ebody
? Há algumas dicas aqui: stackoverflow.com/questions/2123690/… , mas não é uma resposta completa.<html>
tiveroverflow-x:hidden;
este animal, não funcionará. (Pode não funcionar paraoverflow-y:hidden
, eoverflow:hidden
, mas eu não testei.body
funcionou no Chrome no início deste ano, mas agora tem que serhtml
.A resposta de Nick funciona muito bem. Tenha cuidado ao especificar uma função complete () dentro da chamada animate () porque ela será executada duas vezes desde que você tenha dois seletores declarados (html e corpo).
Veja como você pode evitar o retorno de chamada duplo.
fonte
die()
função antes dalive()
chamada de função. Isso garante que seulive()
manipulador será chamado apenas uma vez.A resposta de Nick funciona muito bem e as configurações padrão são boas, mas você pode controlar mais completamente a rolagem, completando todas as configurações opcionais.
aqui está o que parece na API:
para que você possa fazer algo assim:
aqui está a página da API da função janery .animate: http://api.jquery.com/animate/
fonte
Como Kita mencionou, há um problema com vários retornos de chamada acionados quando você anima em 'html' e 'body'. Em vez de animar ambos e bloquear retornos de chamada subseqüentes, prefiro usar alguma detecção básica de recurso e animar apenas a propriedade scrollTop de um único objeto.
A resposta aceita nesse outro thread fornece algumas dicas sobre qual propriedade scrollTop do objeto devemos tentar animar: pageYOffset Scrolling and Animation no IE8
ATUALIZAÇÃO - - -
A tentativa acima na detecção de recurso falha. Parece que não há uma maneira de fazer uma linha como a propriedade pageYOffset de navegadores do tipo kit da web sempre retorna zero quando há um tipo de documento. Em vez disso, encontrei uma maneira de usar uma promessa de fazer um único retorno de chamada para cada vez que a animação é executada.
fonte
Eu tenho o que acredito ser uma solução melhor do que o
$('html, body')
hack.Não é uma frase única, mas o problema que tive
$('html, body')
foi que, se você registrar$(window).scrollTop()
durante a animação, verá que o valor salta por todo o lugar, às vezes centenas de pixels (embora eu não veja nada parecido) visualmente). Eu precisava que o valor fosse previsível, para poder cancelar a animação se o usuário agarrasse a barra de rolagem ou girasse a roda do mouse durante a rolagem automática.Aqui está uma função que animará a rolagem sem problemas:
Abaixo está uma versão mais complexa que cancelará a animação na interação com o usuário, além de reajustar até que o valor alvo seja atingido, o que é útil ao tentar definir o scrollTop instantaneamente (por exemplo, simplesmente chamando
$(window).scrollTop(1000)
- na minha experiência, isso não funciona sobre). 50% do tempo.)fonte
Eu estava tendo problemas em que a animação sempre começava do topo da página após uma atualização da página nos outros exemplos.
Corrigi isso não animando o css diretamente, mas chamando
window.scrollTo();
cada etapa:Isso também contorna o problema
html
vsbody
, pois ele usa JavaScript em vários navegadores.Veja http://james.padolsey.com/javascript/fun-with-jquerys-animate/ para obter mais informações sobre o que você pode fazer com a função animar do jQuery.
fonte
Você pode usar a animação jQuery para a página de rolagem com uma duração específica:
onde 1024px é o deslocamento da rolagem e 5000 é a duração das animações em milissegundos.
fonte
$("html, body").animate({scrollTop: 1024}, 5000);
também funciona.Experimente o plugin scrollTo .
fonte
fonte
Se você quiser mover para baixo no final da página (para não precisar rolar para baixo), use:
fonte
Mas se você realmente quiser adicionar alguma animação durante a rolagem, tente o meu plugin simples ( AnimateScroll ), que atualmente suporta mais de 30 estilos de atenuação
fonte
o código entre navegadores é:
é sem animação, mas funciona em qualquer lugar
fonte