O que estou tentando fazer é fazer com que, se você clicar em um botão, ele role para baixo (suavemente) até um div específico na página.
O que eu preciso é que se você clicar no botão, ele rola suavemente até o div 'segundo'.
.first {
width: 100%;
height: 1000px;
background: #ccc;
}
.second {
width: 100%;
height: 1000px;
background: #999;
}
<div class="first"><button type="button">Click Me!</button></div>
<div class="second">Hi</div>
javascript
jquery
Erik Fischer
fonte
fonte
Respostas:
Faz:
Jsfiddle atualizado
fonte
Existem muitos exemplos de rolagem suave usando bibliotecas JS como jQuery, Mootools, Prototype, etc.
O exemplo a seguir está em JavaScript puro. Se você não tem jQuery / Mootools / Prototype na página ou não quer sobrecarregar a página com pesadas bibliotecas JS, o exemplo será útil.
http://jsfiddle.net/rjSfP/
Parte HTML:
Parte CSS:
Parte JS:
fonte
Eu brinquei com a resposta de nico um pouco e me senti nervosa. Fiz uma investigação e descobri
window.requestAnimationFrame
qual é a função que é chamada a cada ciclo de repintura. Isso permite uma animação de aparência mais limpa. Ainda estou tentando aprimorar os bons valores padrão para o tamanho do passo, mas para o meu exemplo, as coisas parecem muito boas usando esta implementação.fonte
scrollContainer = scrollContainer.parentNode
, scrollContainer é nulo. Isso provavelmente significa que você não está transmitindo o corretoelementId
ao chamar esta função. Também é possível que você esteja executando este script em uma página onde o elementId não existe.elementId
estivesse errado, eu teria recebido o mesmo erro no caso do exemplo de @nico, mas nesse caso a rolagem está funcionando, mas não sem problemas.requestAnimationFrame
vez desetTimeout
é o caminho a seguir.setTimeout
não deve ser usado para animações.E se você usar a função scrollIntoView?
Possui {comportamento: "smooth"} também ....;) https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
fonte
Peguei a versão de Ned Rockson e ajustei para permitir rolar para cima também.
fonte
Você pode usar css básico para obter uma rolagem suave
fonte