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.ts
mé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
scroll
funció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#target
y me dio "el es un error indefinido"!#target
está dentro de un*ngIf
, pero debería funcionar si usa el@ViewChild
método en el enlace de @abbastecEn realidad, existe una forma pura de JavaScript de lograr esto sin usar
setTimeout
orequestAnimationFrame
o 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
#target
se 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
.ts
archivo,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
ViewChild
yElementRef
: darle a su elemento HTML una referenciay dentro de su componente:
que puedes usar
this.myDivRef.nativeElement
para 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