Quiero poder desplazarme a un objetivo cuando se presiona un botón. Estaba pensando en algo como esto.
<button (click)="scroll(#target)">Button</button>
Y en mi component.tsmétodo como.
scroll(element) {
window.scrollTo(element.yPosition)
}
Sé que el código anterior no es válido, solo para mostrar lo que estaba pensando. Acabo de comenzar a aprender Angular 4 sin experiencia previa en Angular. He estado buscando algo como esto, pero todos los ejemplos están en AngularJs, que difiere mucho de Angular 4
javascript
html
angular
typescript
BuZZ-dEE
fuente
fuente

Respuestas:
Podrías hacerlo así:
y luego en su componente:
Editar: Veo comentarios que indican que esto ya no funciona debido a que el elemento no está definido. Creé un ejemplo de StackBlitz en Angular 7 y todavía funciona. ¿Alguien puede dar un ejemplo donde no funciona?
fuente
scrollfunción del componente. Observe que el evento de clic llamascroll(target). Si desea obtener acceso al elemento desde el interior del componente sin tener que pasar el elemento, puede usar@ViewChild.id="target"lugar de#targety me dio "el es un error indefinido"!#targetestá dentro de un*ngIf, pero debería funcionar si usa el@ViewChildmétodo en el enlace de @abbastecEn realidad, existe una forma pura de JavaScript de lograr esto sin usar
setTimeoutorequestAnimationFrameo jQuery.En resumen, busque el elemento en scrollView al que desea desplazarse y utilícelo
scrollIntoView.el.scrollIntoView({behavior:"smooth"});Aquí hay un plunkr .
fuente
Así es como lo hice usando Angular 4.
Modelo
agregue esta función al Componente.
fuente
En Angular 7 funciona perfecto
HTML
En componente
fuente
#targetse define después del botón, lo cual es relevante si tiene un encabezado flotante, por ejemplo ...Jon tiene la respuesta correcta y esto funciona en mis proyectos angulares 5 y 6.
Si quisiera hacer clic para desplazarse suavemente de la barra de navegación al pie de página:
Como quería volver al encabezado desde el pie de página, creé un servicio en el que se encuentra esta función y lo inyecté en los componentes de la barra de navegación y el pie de página y pasé el 'encabezado' o el 'pie de página' cuando fuera necesario. solo recuerde dar a las declaraciones de componentes los nombres de clase utilizados:
fuente
Otra forma de hacerlo en Angular:
Margen:
Agregar
ViewChild()propiedad:Desplácese a cualquier lugar que desee dentro del componente usando la
scrollIntoView()función:fuente
Puede desplazarse a cualquier referencia de elemento en su vista utilizando el bloque de código a continuación. Tenga en cuenta que el objetivo (elementref id ) podría estar en cualquier etiqueta html válida.
En la vista (archivo html)
en el
.tsarchivo,fuente
Puede lograrlo utilizando la referencia a un elemento DOM angular de la siguiente manera:
Aquí está el ejemplo en stackblitz
la plantilla de componente:
fuente
En Angular puede usar
ViewChildyElementRef: darle a su elemento HTML una referenciay dentro de su componente:
que puedes usar
this.myDivRef.nativeElementpara llegar a tu elementofuente
He hecho algo como lo que estás preguntando simplemente usando jQuery para encontrar el elemento (como
document.getElementById(...)) y usando la.focus()llamada.fuente
Puedes hacer esto usando jquery:
código ts:
código HTML :
Aplique esto en los elementos que desea desplazar:
Aquí hay una muestra de stackblitz.
fuente