
Já conhecia há um tempo esta solução para fazer scroll animado em sites. Trata-se de uma solução legal e que funciona bem, no entanto ela tem certas limitações:
1 - Só permite rolagem na vertical, e não na horizontal
2 - Não é muito elegante em termos de código
3 - Não é muito flexível
4 - Só permite que se usem como “alvos” elementos <a> com atributo “name”
Pensando em ter uma solução melhor que resolvesse estes problemas, resolvi criar um plugin para jQuery que permite a utilização de scrolls bonitinhos sem muito esforço e com muita elegância
Trata-se do jQuery Smooth Scroll, vocês podem ver uma demonstração dele funcionando aqui. Experimentem clicar nos links do menu ;). Este efeito tem sido utilizado bastante em sites, onde a navegação é em apenas uma página e em vez da pessoa ter que rolar a página para baixo (ou para os lados), os próprios links fazem isso, e de um modo bem agradável.
#COMOFAS?
Crie os elementos para os quais você quer rolar. Digamos que você tenha um site muito comprido na vertical, com um longo texto, e queira dar a opção para o usuário voltar ao topo sem precisar ele mesmo rolar a página, você faz assim:
<div id="topo">(conteudo do topo)</div>
E lá no final do texto, assim:
<a href="#topo">Voltar ao topo ^</a>
Desta forma, clicando no link a página vai rolar ao topo, mesmo sem javascript nenhum, apenas sem o efeito bacana.
E agora? Como faço o efeitinho?
É muito simples, primeiramente baixe a biblioteca jQuery (que imagino que você já deva estar usando, hein?), e após isso baixe o plugin jQuery Smooth Scroll.
Feito isso, não esqueça de incluí-los em seu head:
<script src="jquery.js" type="text/javascript"></script> <script src="jquery.smoothscroll.js" type="text/javascript"></script>
Para que determinado link chame o efeito, você precisa selecioná-lo com o jQuery e chamar a função smoothScroll. Digamos que eu tenha numa página diversos links com hrefs semelhantes ao que mostrei anteriormente, “#nomedoelemento” como href. Eu posso fazer assim:
$(function(){ $("a[href^=#]").smoothScroll(300,20,20,20) })
Desta forma, todos os links cujo href iniciar com um sustenido (a href=”#…”) irão disparar o efeito. O plugin se encarrega automaticamente de detectar a posição do elemento com aquele ID e de fazer todo o resto, você só precisa chamar a função. Note que ela pode receber 4 parâmetros (os 4 são opcionais, você pode chamar ela sem nenhum se quiser). São eles:
- Duração do efeito: O tempo que o efeito irá demorar, em milisegundos (o padrão é 500)
- Velocidade do efeito: A velocidade média em que a página irá rolar (o padrão é 10). Note que a velocidade varia por causa do easing, em vez do efeito ocorrer de forma linear, ele forma uma curva na sua velocidade (no começo vai devagar, acelerando aos poucos, e quando está chegando no destino vai ficando mais devagar até parar).
- Margem esquerda: Isto serve para dar um espaço extra na lateral esquerda, desta forma o elemento de destino não fica “grudado” no canto da tela (o padrão é zero)
- Margem superior: O mesmo que o anterior, só que para o topo do elemento (o padrão é zero)
Então é isso, espero que tenham gostado do plugin e que utilizem-no para dar um charme a mais nos seus sites
Para finalizar, confira 3 sites que utilizam scroll animado e navegação horizontal:
- deanoakley.com/
- inside.nile.ru/
- www.johanndizon.com/
Até mais!
[...] Screencaster » jQuery Smooth Scroll permite que você faça scrolls animados (tags: plugin jquery plugins scroll) [...]
Legal esta opção! Estou usando no meu site algo parecido mas com smooth scroll na vertical.
Muito legal esse efeito mesmo.
Mas uma pergunta?
Cadê as vídeo aulas de Ruby On Rails? Pelo amo de Deus!!! Está fazendo muita falta!
Se possível fazer uma vídeo aula por dia. HOAIUHsoiAHoiSHaoishaoishaoisHOIShsoihasoiHASOi
Zuera!
Amigo, por favor, nao sei oq esta acontecendo, tenho uma pagina na horizontal com 4 topicos, home,fotos, pacotes,contato, nao consigo de forma alguma divir ela em div, ela so rola para a home, e as demais nao funciona, onde estou errando, vc pode me ajudar? abraço
Carlos, para este tipo de ajuda mais específica recomendo que consulte algum fórum.
[]’s
Onde baixar esse pluguin.?
@Rafael baixe aqui (o link está ali no post) -> http://www.screencaster.com.br/media/smooth_scroll/jquery.smoothscroll.js
Ja tentei outros scripts com esta funcionalidade mas este aparentemente funciona-me melhor..
o problema é que keria ao carregar a pagina ela fosse automaticamente para determinado link.
em outros scripts similares consigo enfiando no kualker coisa como $(”#scrollToHere”) . Mas neste nao consigo achar maneira.
Alguem pode ajudar por favor?
Existe a possibilidade de quando clicar no link ele centralizar em vez de deixar alinhado no topo a esquerda ?
Estou tentando fuçar nisso mas estão complicado pensar na lógico sem entender o funcionamento e manjando pouco de JS
já que depende da resolução do usuario.
Alguém tem uma luz ?
Obrigado!
Só para constar que achei uma solução caso alguém mais precise.
Basta pegar a área “útil” do navegador com JS e fazer o posicionamento com o CSS e redirecionar o tamanho da div com esse valor.
Tútorial para pegar o valor -> http://isbyte.com/?p=63
O código para pegar os valores e jogar na div é esse:
function muda(){
//Gabriel Ferrari
//http://www.gflink.com
//Desenvolvimento Web
//29-10-2009
alert(’Width: ‘ + getWidth().toString());
alert(’Height: ‘ + getHeight().toString());
larg = getWidth().toString();
altu = getHeight().toString();
function getWidth()
{
// Thiago Marotta Couto
// thiago@isbyte.com
// http://isbyte.com/
// December, 06 - 2008
return window.innerWidth ? window.innerWidth : /* For non-IE */
document.documentElement ? document.documentElement.clientWidth : /* IE 6+ (Standards Compilant Mode) */
document.body ? document.body.clientWidth : /* IE 4 Compatible */
window.screen.width; /* Others (It is not browser window size, but screen size) */
}
function getHeight()
{
// Thiago Marotta Couto
// thiago@isbyte.com
// http://isbyte.com/
// December, 06 - 2008
return window.innerHeight ? window.innerHeight : /* For non-IE */
document.documentElement ? document.documentElement.clientHeight : /* IE 6+ (Standards Compilant Mode) */
document.body ? document.body.clientHeight : /* IE 4 Compatible */
window.screen.height; /* Others (It is not browser window size, but screen size) */
}
//Gabriel Ferrari
//http://www.gflink.com
//Desenvolvimento Web
//29-10-2009
document.getElementById(’sua_div’).style.width = larg + ‘px’;
document.getElementById(’sua_div’).style.height = altu + ‘px’;
}
Obrigado por compartilhar sua solução conosco
olá, queria que ao invés de mandar para o topo, ou andar lateralmente, ele ia direto pro rodapé, automatico.
tipo eu to no home, ao eu clico pra ir em contato, mais o meu topo é mto grande, pode ser que o usuario nao perceba que foi carregada a pagina, pois nao aparece no monitor dele, ele precisa rodar o scrool do mouse. Pra melhorar isso que queria jogar automaticamente para o fim da pagina, ou pro meio msm..
poderia me ajudar??
desde já agradeço
–
Ricardo Jr.
Olá Ricardo, o que você quer fazer é bem simples. Basta colocar um ID no elemento para o qual você quer rolar, se for um form, ficaria tipo assim:
<form id="contato">E no seu link você coloca:
<a href="#contato">Texto do link</a>Desta forma, quando a pessoa clicar no link irá para o elemento com o ID “contato”.
Muito bom, simples e eficiente.
Olá, tenho uma dúvida.
“você precisa selecioná-lo com o jQuery e chamar a função smoothScroll” Como faço isso?”
Estude o básico do jQuery que você vai aprender.
Manero cara ótima dica, Estava procurando a um tempo, e nao conseguie.
Parabéns
Como eu monto isso no dreamweaver???? valeu pela ajuda
Oi vcs por um acaso sabem se funciona com joomla?