Eu tenho um rolado div
e quero ter um link quando clico nele, forçará isso div
a rolar para exibir um elemento dentro. Eu escrevi seu JavasSript assim:
document.getElementById(chr).scrollIntoView(true);
mas isso rola toda a página enquanto rola a div
própria. Como consertar isso?
Eu quero dizer assim
MyContainerDiv.getElementById(chr).scrollIntoView(true);
javascript
html
scroll
Amr Elgarhy
fonte
fonte
SetTimeout
na$(document).ready({})
função e definirfocus()
o elemento para o qual você deseja rolar. Funciona para mimRespostas:
Você precisa obter o deslocamento superior do elemento que deseja rolar para exibição, em relação ao pai (o contêiner div de rolagem):
A variável topPos agora está definida para a distância entre a parte superior da div de rolagem e o elemento que você deseja ter visível (em pixels).
Agora dizemos ao div para rolar para essa posição usando
scrollTop
:Se você estiver usando a estrutura JS do protótipo, faça o mesmo:
Novamente, isso rolará a div para que o elemento que você deseja ver esteja exatamente no topo (ou, se isso não for possível, role o mais para baixo possível, para que fique visível).
fonte
myElement.offsetTop
gatilho vontade refluxo (goleada de layout), que poderia ser um gargalo de desempenhoposition: relative
caso contrário, você gastará muito tempo depurando como eu acabei de fazer.overflow-y
propriedadescroll
para o elemento pai (scrolling_div
), caso contrário não estava funcionando. O valor css padrão para aoverflow
propriedade éauto
e mesmo que ele também faz a rolagem manual do possível, o código js não funcionaria (nem mesmo com{psition: relative}
..)h4
ediv
depois asarticle
tags e sóarticle
funcionou para mim.Você precisaria encontrar a posição do elemento no DIV para o qual deseja rolar e definir a propriedade scrollTop.
Atualização :
Código de exemplo para mover para cima ou para baixo
fonte
Método 1 - Rolagem suave para um elemento dentro de um elemento
Método 2 - usando Element.scrollIntoView :
Método 3 - Usando o comportamento de rolagem CSS :
fonte
Para rolar um elemento na visualização de uma div, somente se necessário, você pode usar esta
scrollIfNeeded
função:fonte
O código deve ser:
Você deseja rolar a diferença entre a posição superior do filho e a posição superior do div.
Obtenha acesso a elementos filho usando:
e assim por diante....
fonte
var chElem = document.getElementById('element_within_div');
e a terceira linha lervar topPos = divElem.offsetTop;
?Se você estiver usando jQuery, poderá rolar com uma animação usando o seguinte:
A animação é opcional: você também pode pegar o valor scrollTop calculado acima e colocá-lo diretamente na propriedade scrollTop do contêiner .
fonte
JS nativo, navegador cruzado, rolagem suave (atualização 2020)
A configuração
ScrollTop
fornece o resultado desejado, mas a rolagem é muito abrupta. Usarjquery
uma rolagem suave não era uma opção. Então, aqui está uma maneira nativa de realizar o trabalho que suporta todos os principais navegadores. Referência - caniuseÉ isso aí!
E aqui está um trecho de trabalho para os duvidosos -
Atualização: Como você pode perceber nos comentários, parece que isso
Element.scrollTo()
não é suportado no IE11. Portanto, se você não se importa com o IE11 (realmente não deveria), fique à vontade para usá-lo em todos os seus projetos. Observe que existe suporte para o Edge! Então você não está realmente deixando seus usuários do Edge / Windows para trás;)Referência
fonte
scrollTo()
pode ser suportado em todos os principais navegadores paraWindow
objetos, mas não no IE ou Edge para elementos.window.scrollTo
não éElement.scrollTo
. Tente isso no Edge, por exemplo, e verifique o console: codepen.io/timdown/pen/abzVEMBExistem dois fatos:
1) O componente scrollIntoView não é suportado pelo safari.
2) A estrutura JS jQuery pode fazer o trabalho da seguinte maneira:
fonte
Aqui está uma solução JavaScript pura e simples que funciona para um número de destino (valor para
scrollTop
), elemento DOM de destino ou alguns casos especiais de String:E aqui estão alguns exemplos de uso:
ou
ou
fonte
Outro exemplo de uso do jQuery e do Animate.
fonte
Rolagem animada pelo usuário
Aqui está um exemplo de como rolar programaticamente uma
<div>
horizontalmente, sem o JQuery . Para rolar verticalmente, você substitui as gravações do JavaScript porscrollLeft
porscrollTop
.JSFiddle
https://jsfiddle.net/fNPvf/38536/
HTML
Javascript
Crédito para Dux .
Rolagem animada automática
Além disso, aqui estão as funções para rolar um
<div>
totalmente para a esquerda e direita. A única coisa que mudamos aqui é verificar se a extensão completa da rolagem foi utilizada antes de fazer uma chamada recursiva para rolar novamente.JSFiddle
https://jsfiddle.net/0nLc2fhh/1/
HTML
Javascript
fonte
Isto é o que finalmente me serviu
fonte
o navegador faz a rolagem automática para um elemento que obtém o foco; portanto, o que você também pode fazer para agrupar o elemento no qual você precisa ser rolado
<a>...</a>
e, quando precisar rolar, defina o focoa
fonte
Após selecionar o elemento, use a
scrollIntoView
função com a opção abaixo:Portanto, a resposta para este post é:
fonte
dado que você tem um elemento div que precisa rolar para dentro, tente este trecho de código
document.querySelector('div').scroll(x,y)
isso funciona comigo dentro de uma div com um pergaminho, isso deve funcionar com você caso você aponte o mouse sobre esse elemento e tente rolar para baixo ou para cima. Se funcionar manualmente, também deve funcionar
fonte