typescript - Angular 8 rolar para um fragmento, não traz o fragmento para o topo da página
Eu tenho um link, ao clicar no link, quero rolar para um fragmento que está na parte inferior da página. Quando clico no link, o fragmento funciona, mas não o traz para o topo da página.
Eu tentei usar div e section com um id para criar o fragmento. Mas, isso não traz a div ou section para o topo da página.
O código no módulo de roteamento do meu aplicativo é:
imports: [
RouterModule.forRoot(routes, {
//useHash: true,
scrollPositionRestoration: 'enabled',
onSameUrlNavigation: 'reload',
anchorScrolling: 'enabled'
})]
Meu código de componente para link e fragmento:
<a [routerLink]="['/proposal']" fragment="dcn">{{ dcn }}</a>
<section id="dcn">
Some other html here
</section>
Observe, tentei usar useHash:true, mas parece que não funciona. Eu preferiria uma solução sem que useHash seja verdadeiro.
Resposta #1
Eu uso código assim para rolar até o elemento:
HTML :
<button (click)="scroll(target)"></button>
<div #target>Your target</div>
TS :
scroll(el: HTMLElement) {
el.scrollIntoView();
}
Talvez isso te ajude.
Lembre-se: para rolar a página até o elemento, a página deve ter conteúdo suficiente para gerar uma rolagem/barra de rolagem, caso contrário não há conteúdo para rolar.
Resposta #2
Eu tive a mesma situação e aqui está o que eu fiz:
Este é o link no meu componente de menu:
<a class="dropdown-item" routerLink="/products" fragment="product-one">Product One</a>
E é assim que é declarado no meu componente Product... product.component.html
<div class="anchor">
<a name="product-one"></a>
<h2 >Product One</h2><br>
</div>
produto.componente.css
.anchor a {
position: absolute;
left: 0px;
top: -10em;
}
.anchor {
position: relative;
}
produto.componente.ts:
//TODO: Needs to verify if is necessary to declare Router and ActivatedRoute
constructor( router: Router,
private route:ActivatedRoute,) {
}
Tenha em mente que o atributo top do CSS é equivalente ao tamanho do menu. Dessa forma, quando a rolagem acontecer, ele deve exibir o elemento ancorado logo abaixo do div do menu.
Espero que ajude...
