Eu tenho um link em uma longa página HTML. Quando clico nele, desejo que um div
em outra parte da página fique visível na janela, rolando para a visualização.
Um pouco como EnsureVisible
em outras línguas.
Eu verifiquei scrollTop
e scrollTo
mas eles parecem uma pista falsa.
Alguém pode ajudar?
javascript
html
ɢʀᴜɴᴛ
fonte
fonte
document.getElementById('#something').scrollIntoView({ behavior: 'smooth', block: 'center' });
Se você não quiser adicionar uma extensão extra, o código a seguir deve funcionar com jQuery.
fonte
Que tal o JQuery ScrollTo - veja este código de amostra
fonte
Nenhuma rolagem extravagante, mas deve levá-lo até lá.
fonte
A dificuldade com a rolagem é que você pode não apenas precisar rolar a página para mostrar um div, mas também pode precisar rolar dentro de divs roláveis em qualquer número de níveis.
A propriedade scrollTop está disponível em qualquer elemento DOM, incluindo o corpo do documento. Ao defini-lo, você pode controlar até que ponto algo é rolado para baixo. Você também pode usar as propriedades clientHeight e scrollHeight para ver quanta rolagem é necessária (a rolagem é possível quando clientHeight (janela de visualização) é menor que scrollHeight (a altura do conteúdo).
Você também pode usar a propriedade offsetTop para descobrir onde um elemento está localizado no contêiner.
Para construir uma rotina verdadeiramente geral de "rolar para ver" do zero, você precisa começar no nó que deseja expor, certifique-se de que esteja na parte visível de seu pai e, em seguida, repita o mesmo para o pai, etc, todos o caminho até chegar ao topo.
Uma etapa seria mais ou menos assim (código não testado, sem verificar casos extremos):
fonte
Você pode usar o
Element.scrollIntoView()
método mencionado acima. Se você deixá-lo sem parâmetros internos, terá uma rolagem feia instantânea . Para evitar isso, você pode adicionar este parâmetro -behavior:"smooth"
.Exemplo:
Basta substituir
scroll-here-plz
pelo seudiv
elemento ou em um site. E se você vir seu elemento na parte inferior da janela ou a posição não for o que você esperava, brinque com o parâmetroblock: ""
. Você pode usarblock: "start"
,block: "end"
oublock: "center"
.Lembre-se: sempre use parâmetros dentro de um objeto {}.
Se você ainda tiver problemas, vá para https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
Existe documentação detalhada para este método.
fonte
Isso funcionou para mim
fonte
Resposta postada aqui - mesma solução para o seu problema.
Edit: a resposta JQuery é muito boa se você quiser uma rolagem suave - eu não tinha visto isso em ação antes.
fonte
Por que não uma âncora nomeada?
fonte
A propriedade de que você precisa é location.hash. Por exemplo:
location.hash = 'top'; // pularia para a âncora nomeada "topo
Não sei como fazer a bela animação de rolagem sem o uso do dojo ou algum kit de ferramentas como esse, mas se você só precisa ir para uma âncora, location.hash deve fazer isso.
(testado em FF3 e Safari 3.1.2)
fonte
Não posso adicionar um comentário à resposta de futtta acima, mas para uma rolagem mais suave, use:
fonte
scrollTop (IIRC) é onde no documento a parte superior da página é rolada. scrollTo rola a página de modo que o topo da página seja o local especificado.
O que você precisa aqui é de alguns estilos manipulados por Javascript. Digamos que se você quisesse o div fora da tela e rolar para a direita, definiria o atributo esquerdo do div para a largura da página e, em seguida, diminuiria em um determinado valor a cada poucos segundos até que estivesse onde deseja.
Isso deve apontar a direção certa.
Adicional: sinto muito, pensei que você queria que um div separado 'aparecesse' de algum lugar (mais ou menos como este site faz às vezes) e não movesse a página inteira para uma seção. O uso adequado de âncoras alcançaria esse efeito.
fonte
Existe um plugin jQuery para o caso geral de rolar para um elemento DOM, mas se o desempenho for um problema (e quando não é?), Sugiro fazê-lo manualmente. Isso envolve duas etapas:
quirksmode dá uma boa explicação do mecanismo por trás do primeiro. Esta é minha solução preferida:
Ele usa conversão de nulo para 0, o que não é a etiqueta apropriada em alguns círculos, mas eu gosto :) A segunda parte usa
window.scroll
. Portanto, o resto da solução é:Voila!
fonte
Eu pessoalmente achei a resposta baseada em jQuery de Josh acima a melhor que eu vi, e funcionou perfeitamente para meu aplicativo ... claro, eu já estava usando jQuery ... Eu certamente não teria incluído toda a biblioteca jQ apenas para isso um propósito.
Felicidades!
EDITAR: OK ... poucos segundos depois de postar isso, vi outra resposta logo abaixo da minha (não tenho certeza se ainda está abaixo de mim após uma edição) que dizia para usar:
document.getElementById ('your_element_ID_here'). scrollIntoView ();
Isso funciona perfeitamente e em muito menos código do que a versão jQuery! Eu não tinha ideia de que havia uma função interna em JS chamada .scrollIntoView (), mas aí está! Então, se você quiser uma animação sofisticada, vá para jQuery. Rápido e sujo ... use este!
fonte
Para uma rolagem suave, este código é útil
fonte
Corrija-me se eu estiver errado, mas estou lendo a pergunta repetidamente e ainda acho que Angus McCoteup estava perguntando como definir um elemento para ser posição: fixo.
Angus McCoteup, verifique http://www.cssplay.co.uk/layouts/fixed.html - se você quiser que seu DIV se comporte como um menu ali, dê uma olhada em um CSS ali
fonte