E aí, meu chapa!
Sim, dá pra fazer isso de uma maneira mais maneira usando as animações do Angular. A funcionalidade que tu quer é conhecida como "scroll suave" ou "scroll smooth". O Angular tem uma biblioteca própria pra isso, chamada de @angular/animations
.
Primeiro, tu precisa importar o BrowserAnimationsModule
no teu módulo. Tipo assim:
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
@NgModule({
declarations: [
// teus componentes aqui
],
imports: [
BrowserAnimationsModule,
// outros módulos aqui
],
})
export class AppModule { }
Depois, na tua lista de estilos CSS, tu pode criar uma animação pra ser ativada no scroll. Por exemplo:
@keyframes scrollAnimation {
from {
opacity: 0;
transform: translateY(-50px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.scroll-smooth {
animation: scrollAnimation 0.5s ease-in-out;
}
E no teu componente do Angular, tu pode usar o HostListener
pra detectar o scroll e adicionar a classe de animação:
import { Component, HostListener } from '@angular/core';
@Component({
selector: 'app-tua-lista',
templateUrl: './tua-lista.component.html',
styleUrls: ['./tua-lista.component.css']
})
export class TuaListaComponent {
@HostListener('window:scroll', ['$event'])
onScroll(event: Event): void {
const listaElement = document.getElementById('id-da-tua-lista'); // troca isso pelo id real da tua lista
const distanciaDoTopo = listaElement.getBoundingClientRect().top;
if (distanciaDoTopo < window.innerHeight - 50) { // ajusta esse valor de acordo com quando tu quer que a animação comece
listaElement.classList.add('scroll-smooth');
}
}
}
Lembra de ajustar os valores de acordo com o teu layout e o timing da tua animação. Isso deve suavizar o scroll até a tua lista depois de submeter o formulário.
Boa sorte e bora animar esse scroll!