Quero poder rolar para um destino quando um botão for pressionado. Eu estava pensando algo assim.
<button (click)="scroll(#target)">Button</button>
E no meu component.ts
método parecido.
scroll(element) {
window.scrollTo(element.yPosition)
}
Sei que o código acima não é válido mas apenas para mostrar o que estava pensando. Acabei de começar a aprender Angular 4 sem nenhuma experiência anterior com Angular. Tenho procurado algo assim, mas todos os exemplos estão em AngularJs, que difere muito do Angular 4
javascript
html
angular
typescript
BuZZ-dEE
fonte
fonte
Respostas:
Você poderia fazer assim:
e então em seu componente:
Editar: vejo comentários informando que isso não funciona mais devido ao elemento ser indefinido. Eu criei um exemplo StackBlitz em Angular 7 e ainda funciona. Alguém pode dar um exemplo em que não funciona?
fonte
scroll
função no componente. Observe que o evento de clique chamascroll(target)
. Se você quiser obter acesso ao elemento de dentro do componente sem ter que passar o elemento, você pode usar@ViewChild
.id="target"
vez de#target
e me deu "erro el é indefinido"!#target
estiver dentro de um*ngIf
, mas deve funcionar se você usar o@ViewChild
método no link de @abbastecNa verdade, existe uma maneira pura de javascript de fazer isso sem usar
setTimeout
ourequestAnimationFrame
ou jQuery.Resumindo, encontre o elemento em scrollView para o qual deseja rolar e use
scrollIntoView
.el.scrollIntoView({behavior:"smooth"});
Aqui está um plunkr .
fonte
Aqui está como fiz isso usando o Angular 4.
Modelo
adicione esta função ao componente.
fonte
No Angular 7 funciona perfeito
HTML
Em componente
fonte
#target
estiver definido após o botão, o que é relevante se você tiver um cabeçalho flutuante, por exemplo ...Jon tem a resposta certa e isso funciona em meus projetos angulares 5 e 6.
Se eu quiser clicar para rolar suavemente da barra de navegação para o rodapé:
Como eu queria rolar de volta para o cabeçalho do rodapé, criei um serviço no qual essa função está localizada e o injetei nos componentes da barra de navegação e do rodapé e passei 'cabeçalho' ou 'rodapé' quando necessário. apenas lembre-se de dar às declarações de componente os nomes de classe usados:
fonte
Outra maneira de fazer isso no Angular:
Markup:
Adicionar
ViewChild()
propriedade:Role para qualquer lugar que quiser dentro do componente usando a
scrollIntoView()
função:fonte
Você pode rolar para qualquer elemento ref em sua visão usando o bloco de código abaixo. Observe que o destino (id do elementref ) pode estar em qualquer tag html válida.
Na visualização (arquivo html)
no
.ts
arquivo,fonte
Você pode conseguir isso usando a referência a um elemento DOM angular da seguinte maneira:
Aqui está o exemplo em stackblitz
o modelo de componente:
fonte
No Angular, você pode usar
ViewChild
eElementRef
: dar ao seu elemento HTML uma referênciae dentro do seu componente:
você pode usar
this.myDivRef.nativeElement
para chegar ao seu elementofonte
Eu fiz algo parecido com o que você está pedindo apenas usando jQuery para encontrar o elemento (como
document.getElementById(...)
) e usando a.focus()
chamada.fonte
Você pode fazer isso usando jquery:
código ts:
Código HTML :
Aplique isso nos elementos que você deseja rolar:
Aqui está uma amostra stackblitz.
fonte